مقارنة بين If و Switch
جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 10 من 66.
توفر لغة C# طريقتين أساسيتين للتعامل مع شروط متعددة: جمل if-else وجمل switch. لكل منها نقاط قوتها في سيناريوهات مختلفة.
تُعد جمل If-else مرنة ويمكنها التعامل مع أي نوع من الشروط:
string grade = "B";
if (grade == "A")
{
Console.WriteLine("Excellent");
}
else if (grade == "B")
{
Console.WriteLine("Good");
}
else if (grade == "C")
{
Console.WriteLine("Satisfactory");
}
else
{
Console.WriteLine("Needs improvement");
}تعد جمل Switch أكثر تنظيماً عند مقارنة متغير واحد بعدة قيم ثابتة:
string grade = "B";
switch (grade)
{
case "A":
Console.WriteLine("Excellent");
break;
case "B":
Console.WriteLine("Good");
break;
case "C":
Console.WriteLine("Satisfactory");
break;
default:
Console.WriteLine("Needs improvement");
break;
}يمكن لـ Switch تجميع حالات متعددة تشترك في نفس النتيجة عن طريق تكديس تسميات الحالات (case labels) معًا — وهذا ما يسمى fall-through. عندما لا يوجد كود بين عدة حالات، فإنها جميعًا تنفذ نفس الكتلة البرمجية:
char dayCode = 'S';
switch (dayCode)
{
case 'M':
case 'T':
case 'W':
case 'R':
case 'F':
Console.WriteLine("Weekday");
break;
case 'S':
case 'U':
Console.WriteLine("Weekend");
break;
default:
Console.WriteLine("Unknown day");
break;
}هنا، ينتقل كل من 'S' و 'U' إلى نفس استدعاء Console.WriteLine("Weekend"). تعد تكديس تسميات الحالات الفارغة مثل هذه هي الطريقة القياسية لتجميع الحالات في C#.
التحدي
متوسطأنشئ طريقة تسمى convertGradeToPoints تقوم بما يلي:
- تأخذ درجة حرفية كمعامل نصي (string)
- تحولها إلى نقطة درجة رقمية باستخدام نهجي switch و if-else
- يجب أن تنفذ الطريقة كلا النهجين وتعيد نتيجة تنفيذ switch
- استخدم تحويلات الدرجات هذه:
- "A" أو "a" = 4
- "B" أو "b" = 3
- "C" أو "c" = 2
- "D" أو "d" = 1
- "F" أو "f" = 0
- أي إدخال آخر = -1
ورقة مرجعية
توفر لغة C# طريقتين أساسيتين للتعامل مع الشروط المتعددة: جمل if-else و جمل switch.
جمل If-else مرنة ويمكنها التعامل مع أي نوع من الشروط:
string grade = "B";
if (grade == "A")
{
Console.WriteLine("Excellent");
}
else if (grade == "B")
{
Console.WriteLine("Good");
}
else if (grade == "C")
{
Console.WriteLine("Satisfactory");
}
else
{
Console.WriteLine("Needs improvement");
}تكون جمل Switch أكثر تنظيماً عند مقارنة متغير واحد بعدة قيم ثابتة:
string grade = "B";
switch (grade)
{
case "A":
Console.WriteLine("Excellent");
break;
case "B":
Console.WriteLine("Good");
break;
case "C":
Console.WriteLine("Satisfactory");
break;
default:
Console.WriteLine("Needs improvement");
break;
}يمكن لجمل Switch تجميع حالات متعددة (fall-through) لمشاركة نفس النتيجة عن طريق تكديس تسميات الحالات (case labels):
char dayCode = 'S';
switch (dayCode)
{
case 'M':
case 'T':
case 'W':
case 'F':
Console.WriteLine("Weekday");
break;
case 'S':
case 'U':
Console.WriteLine("Weekend");
break;
default:
Console.WriteLine("Unknown day");
break;
}جرّب بنفسك
public class ConvertGradeToPoints
{
// قم بتنفيذ دالة convertGradeToPoints
public static int convertGradeToPoints(string letterGrade)
{
// اكتب الكود الخاص بك هنا
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادتعريف وتهيئة المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادالمصفوفات المتعرجة (Jagged Arrays)عمليات المصفوفات الشائعةمراجعة - المصفوفات متعددة الأبعاد4تقنيات التحكم في التدفق
الإرجاع المبكرشروط الحمايةجمل القفز (goto)Break و Continueتسطيح الشروط المتداخلة7المعاملات المنطقية المتقدمة
التقييم المختصرالمعاملات المنطقية الشرطيةأولوية المعاملاتمراجعة - المعاملات المتقدمة2اتخاذ القرارات المتقدم
الشروط المتعددةالمنطق البولياني المعقدمقارنة بين If و Switchجمل Switch المتداخلةمراجعة - القرارات المتقدمة5معالجة الاستثناءات
أساسيات Try-Catchأنواع الاستثناءاتكتل Catch المتعددةالتعامل مع الملفاتكتلة FinallyUsing مقابل Try-Finallyاستثناءات مخصصةمراجعة - معالجة الأخطاء8نظام تحليل البيانات
إعداد جمع البياناتمنطق إدخال البيانات11HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمملخص - HashSet3تحسينات الحلقات التكرارية
أداء الحلقات التكراريةالتكرار عبر البيانات المعقدةأنواع الحلقات التكراريةإعادة هيكلة الحلقات التكراريةملخص - الحلقات المحسنة6التعامل مع الـ Null
أساسيات الـ Null Referenceأنواع القيم القابلة للـ Nullأنماط التحقق من الـ Nullالبرمجة الدفاعيةملخص - أمان الـ Null