🎛️ إتقان التحكم في التدفق: شرح بيان switch في جافا خطوة بخطوة

مرحباً بك في درس جديد من دروس "كودكس أكاديمي"! بعد أن تعلمنا استخدام عبارات if-else للتحكم في تدفق البرنامج، حان الوقت لنتعرف على أداة أخرى قوية ومفيدة عندما نواجه حالات متعددة: بيان switch.


🤔 ما هو بيان switch؟

بيان switch هو هيكل تحكم يتيح لك تنفيذ كود مختلف بناءً على قيمة متغير معين. بدلاً من كتابة سلسلة طويلة من if-else if، يمكن لـ switch جعل الكود أكثر تنظيماً وسهولة في القراءة.

الفكرة الأساسية: تقييم تعبير واحد، ثم مقارنة نتيجته بقيم متعددة محتملة (cases). عندما تتطابق القيمة، يتم تنفيذ الكود المخصص لها.


📝 البنية الأساسية لـ switch

لنبدأ بالنظر إلى الهيكل العام لبيان switch:

switch (متغير_أو_تعبير) {
    case value1:
        // الكود الذي ينفذ إذا كان المتغير يساوي value1
        break;
    case value2:
        // الكود الذي ينفذ إذا كان المتغير يساوي value2
        break;
    // يمكنك إضافة العديد من cases كما تريد
    default:
        // الكود الذي ينفذ إذا لم يتطابق المتغير مع أي case
}

دعونا نشرح كل جزء:

  1. switch (متغير_أو_تعبير): نبدأ بكتابة switch متبوعاً بقوسين () بداخلهما المتغير أو التعبير الذي نريد فحص قيمته (مثل رقم يوم الأسبوع، أو درجة الطالب).
  2. case value:: داخل الأقواس المعقوفة {}، نحدد كل حالة محتملة باستخدام الكلمة المفتاحية case متبوعةً بالقيمة المحددة التي نريد مقارنتها، ثم نقطتين :.
  3. break;: هذه الكلمة المفتاحية بالغة الأهمية. تخبر البرنامج بمغادرة كتلة switch بالكامل بعد تنفيذ الكود المطابق للحالة. بدونها، سيستمر البرنامج في تنفيذ جميع cases التي تليها (ظاهرة تسمى "Fall-through").
  4. default:: هذه الحالة اختيارية. تشبه else في عبارة if. يتم تنفيذ الكود الموجود تحتها إذا لم تتطابق قيمة المتغير مع أي من القيم المذكورة في cases.

💡 مثال عملي بسيط: أيام الأسبوع

لنفترض أن لدينا متغيراً يمثل رقم اليوم في الأسبوع (1 للأحد، 2 للإثنين، ...، 7 للسبت)، ونريد طباعة اسم اليوم.

الطريقة باستخدام if-else (الطريقة الطويلة):

int dayNumber = 3;

if (dayNumber == 1) {
    System.out.println("الأحد");
} else if (dayNumber == 2) {
    System.out.println("الإثنين");
} else if (dayNumber == 3) {
    System.out.println("الثلاثاء");
} // ... وهكذا لباقي الأيام

الطريقة باستخدام switch (الطريقة المنظمة):

int dayNumber = 3;

switch (dayNumber) {
    case 1:
        System.out.println("الأحد");
        break;
    case 2:
        System.out.println("الإثنين");
        break;
    case 3:
        System.out.println("الثلاثاء");
        break;
    case 4:
        System.out.println("الأربعاء");
        break;
    case 5:
        System.out.println("الخميس");
        break;
    case 6:
        System.out.println("الجمعة");
        break;
    case 7:
        System.out.println("السبت");
        break;
    default:
        System.out.println("رقم يوم غير صحيح!");
}

ماذا يحدث هنا؟

  1. يتم تقييم قيمة dayNumber (وهي 3).
  2. يبحث البرنامج عن case تطابق هذه القيمة.
  3. يجد case 3: فيقوم بتنفيذ الأمر بداخله: System.out.println("الثلاثاء");.
  4. يصادف break; فيتوقف عن التنفيذ ويخرج من كتلة switch.

⚠️ أهمية كلمة break

لنرى ما يحدث إذا نسينا كتابة break في المثال السابق:

int dayNumber = 3;

switch (dayNumber) {
    case 3:
        System.out.println("الثلاثاء");
        // تم حذف break هنا عن قصد
    case 4:
        System.out.println("الأربعاء");
        break;
}

مخرجات الكود:

الثلاثاء
الأربعاء

لاحظ أن البرنامج استمر في التنفيذ من نقطة التطابق (case 3:) وواصل تنفيذ جميع الأوامر في الـ cases التالية حتى صادف break. هذا يؤكد على أهمية استخدام break للتحكم الدقيق في التدفق.


🛡️ استخدام الحالة الافتراضية default

الحالة default هي شبكة الأمان الخاصة بـ switch. فهي تضمن أن لدينا رد فعل في الحالات غير المتوقعة.

int grade = 95;
char letterGrade;

switch (grade / 10) { // نقسم الدرجة على 10 لتبسيط الحالات
    case 10:
    case 9:
        letterGrade = 'A';
        break;
    case 8:
        letterGrade = 'B';
        break;
    case 7:
        letterGrade = 'C';
        break;
    case 6:
        letterGrade = 'D';
        break;
    default:
        letterGrade = 'F'; // لأي درجة أقل من 60
}
System.out.println("تقديرك هو: " + letterGrade);

في هذا المثال، إذا كانت grade تساوي 45، فإن grade / 10 تساوي 4، والتي لا تطابق أي case، لذا سيتم تعيين letterGrade إلى 'F' في قسم default.


🆚 متى نستخدم switch بدلاً من if-else؟

  • استخدم switch عندما يكون لديك متغير واحد أو تعبير واحد تريد مقارنته بعدد كبير من القيم الثابتة والمحددة.
  • استخدم if-else عندما تحتاج إلى التحقق من شروط معقدة (مثل نطاقات: if (age > 18 && age < 65)) أو مقارنة أكثر من متغير.

باختصار، switch هو أداة تنظيمية رائعة تجعل الكود أنظف وأسهل في الفهم عندما تناسب الموقف.


ماذا سنتعلم في الدرس القادم؟ 🚀

لقد أصبحت الآن قادراً على استخدام بيان switch بثقة لتبسيط عمليات اتخاذ القرار متعددة الحالات. في الدرس القادم، سننتقل إلى مفهوم أساسي وجديد تماماً: الحلقات التكرارية (Loops). سنبدأ بأشهرها وأبسطها، حلقة for. ستتعلم كيف تجعل البرنامج يكرر تنفيذ مجموعة من الأوامر عدداً محدداً من المرات، مما يفتح أمامك أبواباً جديدة للتعامل مع البيانات بشكل أكثر كفاءة. استعد لاكتشاف قوة التكرار!