📊 لو الشرطية المتداخلة: كيف تتحقق من شروط داخل شروط في جافا؟ 🧠

مرحباً بك في درس جديد من دروس سلسلة تعلم الجافا! 🎯 في الدروس السابقة، تعلمنا كيفية استخدام العبارة الشرطية if و if-else لاتخاذ قرارات بسيطة. ولكن ماذا لو كان القرار الذي تريد اتخاذه يعتمد على أكثر من شرط، وأن بعض هذه الشروط تعتمد على نتيجة شرط آخر؟ هنا يأتي دور العبارات الشرطية المتداخلة أو Nested If Statements! هيا نتعرف عليها.


🤔 ما هي العبارات الشرطية المتداخلة؟

ببساطة شديدة، العبارة الشرطية المتداخلة هي عبارة if (أو if-else) موجودة داخل عبارة if (أو if-else) أخرى.

تخيل أنك تريد فتح صندوق، لكن هذا الصندوق بداخله صندوق أصغر! 🎁 تحتاج أولاً إلى فتح الصندوق الخارجي (الشرط الأول)، ثم بعد ذلك يمكنك محاولة فتح الصندوق الداخلي (الشرط الثاني). هذا هو مفهوم التداخل.

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


📝 الشكل العام للعبارة if المتداخلة

if (الشرط_الخارجي) {
    // الكود هنا سينفذ فقط إذا كان الشرط_الخارجي صحيحاً (true)
    
    if (الشرط_الداخلي) {
        // الكود هنا سينفذ فقط إذا كان كلا الشرطين صحيحين:
        // 1. الشرط_الخارجي صحيح
        // 2. الشرط_الداخلي صحيح
    }
}

ملاحظة مهمة: لن يتم أبداً الوصول إلى الشرط الداخلي أو تنفيذ أي كود بداخله إذا كان الشرط الخارجي خاطئاً (false). يجب أن يمر التنفيذ من البوابة الخارجية أولاً! 🚪


💡 مثال عملي بسيط: التحقق من عمر الشخص وإذن الوالدين

لنفترض أننا نريد كتابة برنامج يحدد إذا ما كان شخص يمكنه مشاهدة فيلم معين. شروط الفيلم هي:

  1. يجب أن يكون عمر المشاهد 13 سنة أو أكثر.
  2. إذا كان عمره أقل من 13 سنة، فيحتاج إلى إذن من والديه.

دعونا نترجم هذا المنطق إلى كود جافا باستخدام if متداخلة:

public class Main {
    public static void main(String[] args) {
        int age = 10;
        boolean hasParentalPermission = true; // true تعني نعم، false تعني لا

        if (age >= 13) {
            System.out.println("يمكنك مشاهدة الفيلم. ✅");
        } else {
            // وصلنا إلى هنا لأن عمر المشاهد أقل من 13
            // الآن نتحقق من الشرط الثاني المتداخل
            if (hasParentalPermission == true) {
                System.out.println("عمرك أقل من 13، ولكن بموافقة والديك يمكنك مشاهدة الفيلم. 👨‍👩‍👧");
            } else {
                System.out.println("عذراً، لا يمكنك مشاهدة الفيلم. تحتاج إلى إذن والديك. ❌");
            }
        }
    }
}

شرح ما يحدث:

  1. البرنامج يتحقق أولاً من الشرط الخارجي: هل العمر >= 13؟
  2. إذا كان صحيحاً، يطبع الرسالة الأولى وينتهي.
  3. إذا كان خاطئاً، ينتقل إلى كتلة else الخاصة بالشرط الخارجي.
  4. داخل كتلة else هذه، يوجد شرط if-else متداخل يتحقق من إذن الوالدين.
  5. بناءً على نتيجته، يطبع الرسالة المناسبة.

🧩 مثال آخر: تقييم درجة الطالب

لنصنع برنامجاً يعطي تقييماً حرفياً (A, B, C, D, F) بناءً على الدرجة.

public class Main {
    public static void main(String[] args) {
        int score = 85;

        if (score >= 90) {
            System.out.println("تقييمك: A 🎉");
        } else { // الدرجة أقل من 90
            if (score >= 80) { // متداخلة داخل else الأولى
                System.out.println("تقييمك: B 👍");
            } else { // متداخلة داخل else الأولى، وتابعة للـ if الداخلية
                if (score >= 70) { // متداخلة داخل else الثانية
                    System.out.println("تقييمك: C 👌");
                } else {
                    System.out.println("تقييمك: D أو F، تحتاج للمراجعة. 📚");
                }
            }
        }
    }
}

لاحظ كيف أصبح لدينا هرم من الشروط. هذا الكود صحيح ويعمل، ولكن كتابته بهذه الطريقة قد تصعب قراءته عندما تكثر الشروط. سنتعلم في دروس لاحقة طرقاً أفضل لتنظيم مثل هذه الحالات (مثل else if).


⚠️ نصائح مهمة عند استخدام الشروط المتداخلة

  1. الترتيب المنطقي: 💭 فكر جيداً في ترتيب شروطك. ضع الشرط الأكثر عمومية أو الأهم في الخارج، والأكثر تحديداً في الداخل.
  2. المسافات البادئة (Indentation): ↔️ استخدام المسافات البادئة بشكل منتظم هو سر قراءة الكود بوضوح. لاحظ في الأمثلة كيف كل كتلة if أو else جديدة تبدأ بعد مسافة بادئة. هذا يساعدك على رؤية مستويات التداخل.
  3. لا تبالغ في التداخل: ❌ حاول ألا تتداخل أكثر من 3 أو 4 مستويات عمقاً. إذا وجدت نفسك تفعل ذلك، قد تكون هناك طريقة أفضل لكتابة المنطق (سنتعلمها لاحقاً).
  4. الأقواس المتعرجة {}: تأكد من إغلاق كل قوس متعرج { تم فتحه. الأقواس المتعرجة غير المغلقة هي سبب شائع للأخطاء.

🧪 جرب بنفسك: مهمة صغيرة

حاول تعديل المثال الأول "الفيلم" بحيث يتحقق من شرط إضافي: إذا كان عمر الشخص 18 أو أكثر، يمكنه مشاهدة أي فيلم بغض النظر عن التصنيف. قم بكتابة هذا المنطق باستخدام if متداخلة.

تلميح: ابدأ بالشرط الأكثر عمومية (العمر >= 18).