C#: الجمل الشرطية

1. عبارة if

تقوم عبارة «if» بتنفيذ كتلة من التعليمات البرمجية بناءً على نتيجة تعبير منطقي. وعندما يكون الشرط صحيحًا، يتم تنفيذ الكتلة؛ أما إذا كان خطأً، فيتم تخطيها.

CSHARP
int score = 85;
if (score >= 60)
{
    Console.WriteLine("Passed");
}
TEXT 📖 للعرض فقط
Passed

2. عبارة if...else

استخدم عبارة «if...else» لتنفيذ فرع معين عندما تكون الحالة صحيحة، وفرع آخر عندما تكون الحالة خاطئة.

CSHARP
int age = 16;
if (age >= 18)
{
    Console.WriteLine("Adult");
}
else
{
    Console.WriteLine("Minor");
}
TEXT 📖 للعرض فقط
Minor

3. if...else if: الفروع المتعددة

عندما تحتاج إلى التحقق من عدة شروط متنافية، استخدم عبارة «else if» لاختبارها بالترتيب. ولن يتم تنفيذ سوى الفرع الأول المطابق.

CSHARP
int score = 78;
if (score >= 90)
{
    Console.WriteLine("Excellent");
}
else if (score >= 80)
{
    Console.WriteLine("Good");
}
else if (score >= 60)
{
    Console.WriteLine("Pass");
}
else
{
    Console.WriteLine("Fail");
}
TEXT 📖 للعرض فقط
Pass

4. جملة if المتداخلة

يمكن تداخل عبارات «if»، لكن حاول ألا يتجاوز التداخل مستويين. فالتداخل العميق يضر بقابلية القراءة — فكر في استخراج دالة أو استخدام «else if» بدلاً من ذلك.

▶ مثال

CSHARP
int age = 25;
bool hasTicket = true;
if (age >= 18)
{
    if (hasTicket)
    {
        Console.WriteLine("Admitted");
    }
    else
    {
        Console.WriteLine("Ticket required");
    }
}
else
{
    Console.WriteLine("Too young");
}
▶ جرّب الكود
TEXT 📖 للعرض فقط
Admitted

5. عبارة switch

تقوم عبارة switch بمقارنة تعبير ما بقيم ثابتة متعددة وتنفيذ الفرع المقابل لكل حالة. وعلى عكس لغتي C/C++، لا تسمح لغة C# بـ«المرور التلقائي» (fall-through)؛ حيث يجب أن تنتهي كل حالة بكلمة break أو return أو throw، وإلا سيحدث خطأ في التحويل البرمجي.

▶ مثال

CSHARP
int day = 3;
switch (day)
{
    case 1:
        Console.WriteLine("Monday");
        break;
    case 2:
        Console.WriteLine("Tuesday");
        break;
    case 3:
        Console.WriteLine("Wednesday");
        break;
    case 4:
        Console.WriteLine("Thursday");
        break;
    case 5:
        Console.WriteLine("Friday");
        break;
    default:
        Console.WriteLine("Weekend");
        break;
}
▶ جرّب الكود
TEXT 📖 للعرض فقط
Wednesday

يمكن لعدة حالات أن تشترك في نفس المنطق من خلال سرد تسمياتها بالتتابع:

CSHARP
int month = 2;
switch (month)
{
    case 12:
    case 1:
    case 2:
        Console.WriteLine("Winter");
        break;
    case 3:
    case 4:
    case 5:
        Console.WriteLine("Spring");
        break;
    default:
        Console.WriteLine("Other season");
        break;
}
TEXT 📖 للعرض فقط
Winter

نصيحة: في لغة C#، إذا كنت بحاجة فعلاً للانتقال من حالة إلى أخرى، فيجب عليك استخدام goto case x؛ ولا يُسمح بإغفال الأمر break من أجل التخطي التلقائي.


6. تعبيرات Switch (C# 8+)

قدمت لغة C# 8 تعبيرات switch، وهي تعبيرات وليست جمل برمجية. وهي تُرجع النتيجة المطابقة باستخدام صيغة أكثر إيجازًا. استخدم _ للفرع الافتراضي.

▶ مثال

CSHARP
int code = 404;
string message = code switch
{
    200 => "OK",
    301 => "Moved",
    404 => "Not Found",
    500 => "Server Error",
    _ => "Unknown"
};
Console.WriteLine(message);
▶ جرّب الكود
TEXT 📖 للعرض فقط
Not Found

7. أساسيات مطابقة الأنماط

ابتداءً من الإصدار C# 7، يمكنك استخدام مطابقة الأنماط في المنطق الشرطي. ومن بين الأشكال الشائعة أنماط الأنواع (is Type variable) وعبارات «when guard».

▶ مثال

CSHARP
object obj = "Hello C#";
if (obj is string s)
{
    Console.WriteLine($"String length: {s.Length}");
}
else
{
    Console.WriteLine("Not a string");
}
▶ جرّب الكود
TEXT 📖 للعرض فقط
String length: 8

استخدم عبارة "when" في جملة "switch" لإضافة شروط إضافية:

CSHARP
int value = 15;
string category = value switch
{
    int i when i > 100 => "Extra large",
    int i when i > 10 => "Medium",
    int i when i > 0 => "Small",
    _ => "Invalid"
};
Console.WriteLine(category);
TEXT 📖 للعرض فقط
Medium

8. عامل التشغيل الشرطي ?:

المُشغِّل الشرطي ?:، المعروف أيضًا باسم المُشغِّل الثلاثي، هو اختصار لعبارة if...else. صيغته هي condition ? valueIfTrue : valueIfFalse، ويُحسب التعبير بأكمله ليُعطي القيمة المقابلة.

▶ مثال

CSHARP
int age = 20;
string status = age >= 18 ? "Adult" : "Minor";
Console.WriteLine(status);
▶ جرّب الكود
TEXT 📖 للعرض فقط
Adult

الاستخدام المتداخل (تجنب التداخل المفرط):

CSHARP
int score = 75;
string result = score >= 90 ? "A" : score >= 60 ? "B" : "C";
Console.WriteLine(result);
TEXT 📖 للعرض فقط
B

تحذير: تنخفض سهولة القراءة بشكل حاد عندما يتم تداخل المشغل الشرطي لأكثر من مستويين. استخدم جمل «if...else if» بدلاً من ذلك.


❓ أسئلة شائعة

س هل يمكن في جمل «switch» بلغة C# حذف الأمر «break» لتحقيق «fall-through» كما هو الحال في لغة C؟
ج لا. تمنع لغة C# حدوث «fall-through» في جمل «switch». يجب أن تنتهي كل حالة بـ «break» أو «return» أو «throw»، وإلا سيحدث خطأ في التحويل البرمجي. لمشاركة المنطق، قم بإدراج تسميات الحالات المتعددة بشكل متتالي.
س ما الفرق بين تعبير switch وجملة switch؟
ج تعبير switch هو تعبير يجب أن يُرجع قيمة، ويستخدم => وأذرعًا مفصولة بفواصل. أما جملة switch فهي جملة لا تتطلب قيمة مُرجعة، وتستخدم كتل case/break.
س ما الفرق بين is و==؟
ج == يقارن القيم للتأكد من تساويها، بينما يُستخدم is لمطابقة الأنماط ويمكنه التحقق من النوع أثناء إعلان المتغير، مثل obj is string s.
س هل يمكن للمُشغِّل الشرطي أن يحل محل جميع عبارات if...else؟
ج لا. لا يعمل المُشغِّل الشرطي إلا في الحالات التي تُرجع قيمة، ولا يمكن أن يحتوي على جمل متعددة. استخدم عبارة if...else في الحالات التي تتطلب منطقًا معقدًا.

📖 ملخص

📝 تمارين

  1. اكتب برنامجًا يقرأ عددًا صحيحًا ويحدد ما إذا كان موجبًا أم سالبًا أم صفرًا، ثم يعرض النتيجة
  2. استخدم تعبير «switch» لربط كل شهر (1-12) باسم الموسم المقابل له
  3. اكتب برنامجًا يستقبل متغيرًا من نوع «كائن»، ويستخدم مطابقة الأنماط is لتحديد نوعه (عدد صحيح، أو سلسلة، أو غير ذلك)، ثم يعرض النوع والقيمة
  4. استخدم المشغل الشرطي لتحويل الدرجة الرقمية إلى درجة حرفية (90+ تعني A، و80+ تعني B، و60+ تعني C، وإلا فهي D)، ثم قارن سهولة القراءة مع نسخة تستخدم if...else if
Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%