جمل if المتداخلة
مُقدَّم| English | المعنى |
|---|---|
| nested if/ˈnestɪd ɪf/ | if متداخلة |
فرع أول واسع يخفي الدرجة العليا
- سلم الدرجات يختبر
s >= 60قبلelse if (s >= 90). مع s=95، الشرط الأول صحيح، لذا يعمل فروعته ولا يتم اختبار فرع الدرجة العليا أبدًا. - لهذه الحدود الأدنى المتداخلة، اختبر العتبة الأعلى أولاً. هذه قاعدة استنتاج لهذا السلم، وليست شرطًا لترتيب كل شروط ممكنة من "الأكثر تحديدًا" إلى "الأقل تحديدًا".
التداخل يجعل القرار يعتمد على المسار المحيط به
- الشرط المتداخل يضع شرط if داخل فرع آخر. إذا كان التعليق الداخلي في الفرع الخارجي الصحيح، فإنه يُنفذ فقط عندما يكون ذلك الشرط الخارجي صحيحًا؛ أما if الموجود داخل else فيُنفذ عبر المسار الخاطئ بدلاً من ذلك.
- استخدم الأقواس المعقوفة لتوضيح البنية. يرتبط else بدون أقواس مع أقرب if غير مطابقة، مما قد يختلف عما توحي به المسافات البادئة.
تختار السلم أول فرع يطابقه
- يتحقق سلم
if ... else if ... elseمن الشروط من الأعلى إلى الأسفل حتى العثور على أول شرط صحيح. مع وجود else أخيرة، يتم اختيار فرع واحد عند اكتمال تقييم الشروط؛ وبدون else، قد لا يُنفذ أي فرع. - الدالة أدناه تقبل درجات صحيحة عادية وتعيد A أو B أو C أو F. بالنسبة لـ 85، فهي تتحقق من 90، ثم 80، وتعيد B، ولا تقيّم اختبارات الفروع المتبقية أبدًا.
public class GradeChoice {
public static String grade(int s) {
if (s >= 90) {
return "A";
} else if (s >= 80) {
return "B";
} else if (s >= 70) {
return "C";
} else {
return "F";
}
}
}
اميز بين الحالات المتداخلة وغير المتداخلة
- مع حدود سفلية متداخلة، يتضمن
s >= 60كل درجة تحققs >= 90. وضعها في البداية يمنع اختيار الفرع الثاني، حتى لو كان يمكن للغة Java.compile السلم. - للاختبارات المنفصلة تمامًا مثل
x < 0وx == 0وx > 0، فإن تغيير ترتيبها مع الحفاظ على نفس النتائج لا يلزم أن يغير النتيجة. قد تفضل السياسات المتداخلة بدلاً من ذلك حالة معينة عمدًا؛ اتبع المتطلبات المعلنة.
الفروع التي تكون صحيحة أولاً هي التي تُنفَّذ
s = 85 تأخذ الفرع >= 80 (B)؛ يتم تخطي الفروع اللاحقة.
في سلسلة if-else، أي كتل شرط يُنفَّذ؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
تأخذ Java الشرط الأول الصحيح من الأعلى إلى الأسفل.
بالنسبة لـ if (s>=90) A; else if (s>=80) B; else C; مع s = 85، النتيجة هي...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
85 تفشل في >=90 لكنها تمر بـ >=80 → B، ثم تتوقف.
إذا جاء شرط واسع قبل شرط أضيق في السلسلة، قد يصبح الفرع الأضيق غير قابل للوصول.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
الشرط الواسع يمسك تلك الحالات أولاً؛ ضع الأدق أولاً.
بالنسبة لـ if داخلية موضوعة داخل الفرع الصحيح لـ if الخارجية، يتم التحقق من الشرط الداخلي حتى عندما يكون الشرط الخارجي كاذباً.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
لا يُنفذ ذلك التعبير الداخلي في المسار الخاطئ. لو وُضع if داخل فرع else لأصبح له مسار محاط مختلف.
بالنسبة لمدرج الدرجات الموضح باستخدام s >= 90، s >= 80 و s >= 70، أي ترتيب يحافظ على أعلى الدرجات المقصودة؟
Difficulty 1/5 · 100 coins + a small bonus on first completion today
تأتي الحدود الدنيا الأعلى أولاً لأن هذه المقارنات تتداخل. هذا ليس قاعدة ترتيب عالمية لجميع الشروط المنطقية.
افصل if المستقلة عن السلم
- statementان منفصلان،
if (s >= 60) ...; if (s >= 90) ...;، كلاهما ينفذ جسميهما من أجل s=95. يربط سلم if-else البديلات ويختار فقط أول تطابق له. - تتبع بالقيم الفعلية عند العتبة وما دونها مباشرة: 90 يذهب إلى A، 89 إلى B، 80 إلى B، 79 إلى C و69 إلى F. اختبار 85 فقط سيؤدي إلى تفويت عامل حد خاطئ.
"الفائز الأول الصحيح" يصف السلم المرتبط، وليس عدة statements if مستقلة. يمكن أن يكون فرع مستحيل الاختيار لأن مقارنة سابقة تمسك بجميع مدخلاته دون التسبب في خطأ unreachable-statement وقت الترجمة.
يختبر ifان مستقلان s >= 60 و s >= 90. بالنسبة لـ s=95، كم عدد الأجزاء التي ستُنفذ؟
Difficulty 2/5 · 140 coins + a small bonus on first completion today
كلا الشرطين صحيحان والتعبيرات مستقلة، لذا يُنفذ كلا الجزئين.
تتبع الفرع الخاطئ لـ if الخارجي
- في
if (weekday) { ... } else { if (raining) { ... } }، يتم الوصول إلى اختبار الأمطار الداخلي عندما يكون weekday false. الفرع المحيط، وليس مجرد كلمة "متداخل"، هو ما يحدد متى يعمل. - حدد الأقواس المعقوفة، والبدائل المرتبطة، والشروط المتداخلة والمدخلات الفعلية قبل التنبؤ بالمسار. حافظ على سياسة الكود واختبارات الحدود متسقة؛ لا تحدد المسافات البادئة وحدها مجموعة عمل Java.
يعمل if المتداخل فقط عندما يصل التحكم إلى فرعه المحيط. يختار السلم المرتبط أول شرط صحيح؛ يمكن لـ statements if المستقلة تشغيل عدة أجسام. تأتي العتبات الأعلى أولاً في هذا السلم للدرجات المحدد لأن شروطه متداخلة.
With if (s >= 60) result = 1; else if (s >= 90) result = 2; else result = 3;, what is result for s = 95?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
95 satisfies the first comparison, so result becomes 1 and the else-if branch is skipped.
يمكن الوصول إلى if موجودة داخل فرع else خارجي عندما يكون الشرط الخارجي كاذباً.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
نعم: المسار الخارجي الخاطئ يدخل في else، حيث يمكن أن يعمل الاختبار الداخلي.