العبارات الشرطية: if و switch
حتى الآن كان البرنامج ينفّذ كل سطر من الأعلى إلى الأسفل. الآن يتّخذ قرارًا: إذا تحقّق شرط فافعل كذا.
- تكتب جملة if و if…else وسلسلة else if.
- تكتب if المتداخلة وتربط الشروط بالرموز المنطقية.
- تكتب جملة switch مع case و break و default.
- تختار بين if و switch حسب طبيعة المسألة.
١الفكرة
نضع شرطًا نتيجته true أو false، فيُنفَّذ الكود المرتبط به فقط عند تحقّقه.
٢الصور الأربع لجملة if
١. if بمفردها: نفّذ أو تجاوز
int age = 20; if (age >= 18){ System.out.println("مسموح لك بالدخول");}
لو كان العمر أقل من 18 لا يُطبع شيء.
٢. if … else: اختر بين مسارين
int grade = 50; if (grade >= 60){ System.out.println("ناجح");}else{ System.out.println("راسب");}
٣. if … else if … else: عدّة شروط بالترتيب
يُنفَّذ أوّل شرط يتحقّق فقط، ثم يخرج. و else الأخيرة لبقية الحالات.
int grade = 75; if (grade >= 90) { System.out.println("ممتاز");}else if (grade >= 80) { System.out.println("جيد جدًا");}else if (grade >= 70) { System.out.println("جيد");}else { System.out.println("راسب");}
٤. if المتداخلة: شرط داخل شرط
int age = 20;boolean hasTicket = true; if (age >= 18) { if (hasTicket) { System.out.println("تفضّل بالدخول"); }}
٣أخطاء شائعة
if (x = 5)if (x == 5)= إسناد، و == مقارنة. داخل الشرط نحتاج المقارنة.
if (age >= 18);{ System.out.println("مسموح");}
if (age >= 18){ System.out.println("مسموح");}
الفاصلة المنقوطة بعد الشرط تُنهي جملة if فارغة، فتُنفَّذ الكتلة دائمًا مهما كان الشرط.
- الشرط بين قوسين ( )، والكود المرتبط بين قوسين معقوفين { }.
- كلمة
elseبأحرف صغيرة؛Elseخطأ لأن جافا حسّاسة لحالة الأحرف.
٤الفكرة والصيغة
بديل أنظف عن سلسلة if … else if عندما نسأل: هل قيمة المتغيّر تساوي إحدى هذه القيم؟ والمقارنة تكون مع رقم أو حرف أو نصّ.
switch (المتغيّر){ case القيمة_الأولى: // كود يُنفّذ عند التطابق break; case القيمة_الثانية: // كود آخر break; default: // إذا لم تتطابق أي قيمة}
| العنصر | وظيفته |
|---|---|
case | قيمة نقارن بها المتغيّر |
break | يوقف الجملة ويخرج منها بعد تنفيذ الحالة |
default | تُنفَّذ إذا لم تتطابق أي حالة (اختيارية لكنها مستحسنة) |
٥جرّب: رقم اليوم ← اسمه
اختر قيمة day، ثم جرّب إلغاء break من إحدى الحالات.
int day = 3; switch (day){ case 1: System.out.println("الأحد"); break; case 2: System.out.println("الاثنين"); break; case 3: System.out.println("الثلاثاء"); break; default: System.out.println("رقم غير صحيح");}
مثال: المقارنة مع حرف
char grade = 'B'; switch (grade){ case 'A': System.out.println("ممتاز"); break; case 'B': System.out.println("جيد جدًا"); break; case 'C': System.out.println("جيد"); break; default: System.out.println("يحتاج تحسين");}
٦تجميع الحالات: ترك break عمدًا
الحالات التي لها الناتج نفسه تُكتب متتالية بلا break بينها:
case 'A':case 'B': System.out.println("ناجح بتقدير مرتفع"); break;
٧switch أم if؟
| switch | if | |
|---|---|---|
| نوع المقارنة | مساواة متغيّر واحد بقيم ثابتة | مجالات أو منطق مركّب |
| أمثلة | رقم قائمة، حرف تقدير، رقم يوم | الدرجة أكبر من 60، أو شرطان معًا |
- switch يقارن المساواة فقط؛ لا يصلح لـ «أكبر من».
- قيم case ثابتة (رقم أو حرف أو نصّ)، لا متغيّرات.
- يدعم الأنواع: int و char و String (والأنواع الصحيحة الأصغر).
توقّع وتحقّق
تأمل الكود التالي،
int x = 10;if (x > 15) System.out.println("كبير");else System.out.println("صغير");
ماذا سيكون الناتج عند تنفيذه؟
تأمل الكود التالي،
int grade = 95;if (grade >= 90) System.out.println("ممتاز");else if (grade >= 80) System.out.println("جيد جدًا");else if (grade >= 70) System.out.println("جيد");else System.out.println("مقبول");
كم رسالة تُطبع عند تنفيذه؟
تأمل الكود التالي،
if (age >= 18){ if (hasTicket) System.out.println("تفضّل بالدخول");}
متى تُطبع العبارة «تفضّل بالدخول»؟
أي سطر صحيح؟
تأمل الكود التالي،
int n = 2;switch (n){ case 1: System.out.print("A "); case 2: System.out.print("B "); case 3: System.out.print("C "); default: System.out.print("D");}
ماذا سيكون الناتج عند تنفيذه؟
أي حالة لا تناسب switch؟
متى يُنفَّذ default؟
ما فائدة break داخل switch؟
الخلاصة
- if تنفّذ الكود عند تحقق الشرط، و else لبقية الحالات.
- else if تفحص الشروط بالترتيب وتنفّذ أول شرط متحقق فقط.
- switch تقارن قيمة واحدة بعدة حالات ثابتة.
- نسيان break في switch ينقل التنفيذ إلى الحالة التالية.
- switch للقيم المحددة، و if للمجالات والشروط المركّبة.
تحدٍّ برمجي: مُقدِّر الدرجات
متوسطحوّل الدرجة إلى تقدير، ثم حدّد هل الدرجة زوجية أم فردية.
- 90 فأكثر ممتاز، 80 جيد جدًا، 70 جيد، 60 مقبول، وأقل من 60 راسب.
- استخدم سلسلة if … else if … else.
- استخدم % 2 لمعرفة الزوجي والفردي.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
public class Grader{ public static void main(String[] args) { int grade = 67; // 1) التقدير // 2) زوجي أم فردي }}
💡 تلميح 1
💡 تلميح 2
حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
public class Grader{ public static void main(String[] args) { int grade = 67; if (grade >= 90) System.out.println("التقدير: ممتاز"); else if (grade >= 80) System.out.println("التقدير: جيد جدًا"); else if (grade >= 70) System.out.println("التقدير: جيد"); else if (grade >= 60) System.out.println("التقدير: مقبول"); else System.out.println("التقدير: راسب"); if (grade % 2 == 0) System.out.println("الدرجة زوجية"); else System.out.println("الدرجة فردية"); }}