جملة switch
جملة تحكّم تقارن متغيّرًا واحدًا بعدّة قيم ثابتة، وتنفّذ الكود الموافق للقيمة المطابقة.
- كتابة جملة switch بعناصرها: case و break و default.
- توقّع أثر نسيان break (fall-through).
- تجميع عدّة حالات لها الناتج نفسه.
- الاختيار بين switch و if بحسب نوع المقارنة.
١الفكرة والصيغة
بديل أنظف عن سلسلة 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 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؟
الخلاصة
- switch يقارن متغيّرًا واحدًا بقيم ثابتة بالمساواة فقط.
- ضع break بعد كل حالة، إلّا إذا قصدت تجميع الحالات.
- default لما لم يتطابق، ويُستحسن وجودها.
- للمجالات والشروط المركّبة استخدم if.
تحدٍّ برمجي: آلة حاسبة بـ switch
متوسطنفّذ عملية حسابية بحسب الرمز المخزّن في المتغيّر op.
- العمليات: + و - و * و /.
- أي رمز آخر يطبع «عملية غير معروفة».
- جرّب بتغيير op إلى '+' ثم إلى '?'.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
public class Calc{ public static void main(String[] args) { int a = 12, b = 4; char op = '*'; // switch على op }}
💡 تلميح 1
💡 تلميح 2
حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
public class Calc{ public static void main(String[] args) { int a = 12, b = 4; char op = '*'; switch (op) { case '+': System.out.println(a + " + " + b + " = " + (a + b)); break; case '-': System.out.println(a + " - " + b + " = " + (a - b)); break; case '*': System.out.println(a + " * " + b + " = " + (a * b)); break; case '/': System.out.println(a + " / " + b + " = " + (a / b)); break; default: System.out.println("عملية غير معروفة"); } }}
أسئلة التقييم
ورقة العمل: جملة switch. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».
1السؤال الأول: اختر الإجابة الصحيحة
1) switch تقارن المتغيّر:
2) الكلمة التي توقف الحالة وتخرج منها:
3) الحالة التي تُنفَّذ عند عدم التطابق:
4) نسيان break يؤدّي إلى:
2السؤال الثاني: صح أم خطأ
3السؤال الثالث: أكمل الفراغات
1) نبدأ الجملة بالكلمة .
💡 اسم الجملة نفسها.
2) كل قيمة نقارن بها تُكتب بعد الكلمة .
💡 كلمة تسبق كل قيمة.
3) لإيقاف الحالة والخروج نستخدم .
💡 الكلمة التي توقف التنفيذ.
4) عند عدم تطابق أي حالة تُنفَّذ .
💡 الحالة الافتراضية.
5) switch يقارن فقط.
💡 switch لا تقارن «أكبر من»، بل …
4السؤال الرابع: التوصيل
طابِق كل عنصر في العمود (أ) بما يناسبه في العمود (ب):
- 1) switch
- 2) case
- 3) break
- 4) default
- 5) fall-through
- أ. قيمة نقارن بها.
- ب. بداية الجملة.
- ج. الحالة الافتراضية.
- د. الخروج من الحالة.
- هـ. متابعة الحالات عند نسيان break.
5السؤال الخامس: أسئلة عملية
1) تتبّع الناتج:
char g = 'B';switch (g) { case 'A': System.out.print("ممتاز"); break; case 'B': System.out.print("جيد جدًا"); break;}
2) صحّح: أكمل ما ينقص السطر
case 1 System.out.print("واحد")case 1: System.out.print("واحد"); break;3) متى تُفضّل switch على if؟