C#: الجمل الشرطية
آخر تحديث: 2026-08-26
1. عبارة if
تقوم عبارة «if» بتنفيذ كتلة من التعليمات البرمجية بناءً على نتيجة تعبير منطقي. وعندما يكون الشرط صحيحًا، يتم تنفيذ الكتلة؛ أما إذا كان خطأً، فيتم تخطيها.
int score = 85;
if (score >= 60)
{
Console.WriteLine("Passed");
}
Passed
2. عبارة if...else
استخدم عبارة «if...else» لتنفيذ فرع معين عندما تكون الحالة صحيحة، وفرع آخر عندما تكون الحالة خاطئة.
int age = 16;
if (age >= 18)
{
Console.WriteLine("Adult");
}
else
{
Console.WriteLine("Minor");
}
Minor
3. if...else if: الفروع المتعددة
عندما تحتاج إلى التحقق من عدة شروط متنافية، استخدم عبارة «else if» لاختبارها بالترتيب. ولن يتم تنفيذ سوى الفرع الأول المطابق.
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");
}
Pass
4. جملة if المتداخلة
يمكن تداخل عبارات «if»، لكن حاول ألا يتجاوز التداخل مستويين. فالتداخل العميق يضر بقابلية القراءة — فكر في استخراج دالة أو استخدام «else if» بدلاً من ذلك.
▶ مثال
int age = 25;
bool hasTicket = true;
if (age >= 18)
{
if (hasTicket)
{
Console.WriteLine("Admitted");
}
else
{
Console.WriteLine("Ticket required");
}
}
else
{
Console.WriteLine("Too young");
}
Admitted
5. عبارة switch
تقوم عبارة switch بمقارنة تعبير ما بقيم ثابتة متعددة وتنفيذ الفرع المقابل لكل حالة. وعلى عكس لغتي C/C++، لا تسمح لغة C# بـ«المرور التلقائي» (fall-through)؛ حيث يجب أن تنتهي كل حالة بكلمة break أو return أو throw، وإلا سيحدث خطأ في التحويل البرمجي.
▶ مثال
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;
}
Wednesday
يمكن لعدة حالات أن تشترك في نفس المنطق من خلال سرد تسمياتها بالتتابع:
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;
}
Winter
نصيحة: في لغة C#، إذا كنت بحاجة فعلاً للانتقال من حالة إلى أخرى، فيجب عليك استخدام
goto case x؛ ولا يُسمح بإغفال الأمر break من أجل التخطي التلقائي.
6. تعبيرات Switch (C# 8+)
قدمت لغة C# 8 تعبيرات switch، وهي تعبيرات وليست جمل برمجية. وهي تُرجع النتيجة المطابقة باستخدام صيغة أكثر إيجازًا. استخدم _ للفرع الافتراضي.
▶ مثال
int code = 404;
string message = code switch
{
200 => "OK",
301 => "Moved",
404 => "Not Found",
500 => "Server Error",
_ => "Unknown"
};
Console.WriteLine(message);
Not Found
7. أساسيات مطابقة الأنماط
ابتداءً من الإصدار C# 7، يمكنك استخدام مطابقة الأنماط في المنطق الشرطي. ومن بين الأشكال الشائعة أنماط الأنواع (is Type variable) وعبارات «when guard».
▶ مثال
object obj = "Hello C#";
if (obj is string s)
{
Console.WriteLine($"String length: {s.Length}");
}
else
{
Console.WriteLine("Not a string");
}
String length: 8
استخدم عبارة "when" في جملة "switch" لإضافة شروط إضافية:
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);
Medium
8. عامل التشغيل الشرطي ?:
المُشغِّل الشرطي ?:، المعروف أيضًا باسم المُشغِّل الثلاثي، هو اختصار لعبارة if...else. صيغته هي condition ? valueIfTrue : valueIfFalse، ويُحسب التعبير بأكمله ليُعطي القيمة المقابلة.
▶ مثال
int age = 20;
string status = age >= 18 ? "Adult" : "Minor";
Console.WriteLine(status);
Adult
الاستخدام المتداخل (تجنب التداخل المفرط):
int score = 75;
string result = score >= 90 ? "A" : score >= 60 ? "B" : "C";
Console.WriteLine(result);
B
تحذير: تنخفض سهولة القراءة بشكل حاد عندما يتم تداخل المشغل الشرطي لأكثر من مستويين. استخدم جمل «if...else if» بدلاً من ذلك.
❓ أسئلة شائعة
=> وأذرعًا مفصولة بفواصل. أما جملة switch فهي جملة لا تتطلب قيمة مُرجعة، وتستخدم كتل case/break.is و==؟== يقارن القيم للتأكد من تساويها، بينما يُستخدم is لمطابقة الأنماط ويمكنه التحقق من النوع أثناء إعلان المتغير، مثل obj is string s.📖 ملخص
- تقوم عبارة «if» بتنفيذ كتلة من التعليمات البرمجية بناءً على شرط منطقي
- توفر عبارة «if...else» تفرعًا ثنائي الاتجاه؛ بينما تتعامل عبارة «else if» مع شروط متعددة متنافية
- احرص على ألا يتجاوز عدد مستويات العبارات الشرطية المتداخلة مستويين أو أقل، وذلك لتسهيل قراءتها
- تقوم كلمة switch بمطابقة القيم الثابتة؛ بينما تمنع لغة C# التخطي التلقائي (fall-through) وتشترط استخدام break أو return أو throw
- تعبيرات Switch (C# 8+) هي بديل موجز يُرجع قيمةً باستخدام
_كقيمة افتراضية - تستخدم مطابقة الأنماط
is Type varللتحقق من الأنواع واستخراج القيم؛ وعندما تضيف الشروط الحارسة شروطًا إضافية - يعمل المشغل الشرطي
?:على تبسيط عمليات التعيين الثنائية البسيطة
📝 تمارين
- اكتب برنامجًا يقرأ عددًا صحيحًا ويحدد ما إذا كان موجبًا أم سالبًا أم صفرًا، ثم يعرض النتيجة
- استخدم تعبير «switch» لربط كل شهر (1-12) باسم الموسم المقابل له
- اكتب برنامجًا يستقبل متغيرًا من نوع «كائن»، ويستخدم مطابقة الأنماط
isلتحديد نوعه (عدد صحيح، أو سلسلة، أو غير ذلك)، ثم يعرض النوع والقيمة - استخدم المشغل الشرطي لتحويل الدرجة الرقمية إلى درجة حرفية (90+ تعني A، و80+ تعني B، و60+ تعني C، وإلا فهي D)، ثم قارن سهولة القراءة مع نسخة تستخدم if...else if