תנאי if מובנים בתוך תנאי if
הוצג| English | משמעות |
|---|---|
| nested if/ˈnestɪd ɪf/ | תנאי משובץ |
ערוץ ראשון רחב מחביא על הציון הגבוה
- סולם ציונים בודק
s >= 60לפניelse if (s >= 90). עם s=95, התנאי הראשון הוא נכון, ולכן הערוץ שלו פועל וערוץ הציון הגבוה לעולם לא נבדק. - עבור ספיחים נמוכים אלו, בדוק את הסף הגבוה תחילה. זוהי כלל סיכום עבור סולם זה, ולא דרישה לסדר כל תנאי אפשרי מ"הכי ספציפי" ל"הכי כללי".
השתלבות גורמת החלטה להסתמך על המסלול המקיף שלה
- אם פנימי מציב את if בתוך ענף אחר. אם הביטוי הפנימי נמצא בענף האמיתי החיצוני, הוא יוצא לביצוע רק כאשר התנאי החיצוני מתקיים; אם if נמצאת בתוך else היא תוצא לביצוע על מסלול השקר במקום זאת.
- השתמש בסוגריים כדי להראות את המבנה. else ללא סוגריים קשורה לאם האחרונה שאין לה זוג, דבר שעלול להיות שונה מהמה שההדפסה (indentation) מציעה.
סולם בוחר את הענף הראשון המתאים
- סולם
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 יכול להרכיב את הסולם. - עבור בדיקות בלתי-חופפות טהורות כמו
x < 0,x == 0ו-x > 0, שינוי סדרן תוך שמירה על אותן תוצאות אינו חייב לשנות את התוצאה. מדיניות חופפת עשויה במקום זאת לקבוע עדיפות מכוונת למקרה אחד; יש לפעול לפי הדרישה המפורשת.
הענף הראשון האמתי מנצח
s = 85 לוקח את ענף ה >= 80 (B); ענפים מאוחרים מושתקקים.
בסולם else-if, בלוק של哪个条件 יופעל?
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 (s >= 60) ...; if (s >= 90) ...;, יוצאים לביצוע הגוף שלהם שניהם עבור s=95. סולם if-else מקשר את האלטרנטיבות ובוחר רק את ההתאמה הראשונה שלו. - עקוב עם ערכים אמיתיים בקצה ובקצה התחתון: 90 הופך ל-A, 89 ל-B, 80 ל-B, 79 ל-C ו-69 ל-F. בדיקה של 85 בלבד הייתה פוסלת טעות באופרטור הגבול.
"האמיתי הראשון מנצח" מתאר סולם מקושר, ולא מספר ifים עצמאיים. ענף יכול להיות בלתי-ניתן לבחירה כי השוואה קודמת תופסת את כל הקלטותיו ללא גרימת שגיאת "ביטוי בלתי-נגיש" בזמן הרכיבה.
שתי语句ות if עצמאיות בודקות s >= 60 ו-s >= 90. עבור s=95, כמה גוף语句ות יופעלו?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
שני התנאים אמתיים וההצהרות עצמאיות, ולכן שני הגוף语句ות יופעלו.
עקוב אחרי הענף השקר של אם חיצוני
- ב-
if (weekday) { ... } else { if (raining) { ... } }, בדיקת הגשם הפנימית נוצרת כאשר weekday הוא false. הענף המקיף, ולא רק המילה "פנימי", קובע מתי זה יוצא לביצוע. - זיהוי סוגריים, אלטרנטיבות מקושרות, תנאים חופפים והקלט האמיתי לפני חזוי מסלול. שמור על מדיניות הקוד ועל בדיקות הגבול כשורים; הדפסה לבדה אינה קובעת את ההתקבצות ב-Java.
אם פנימי יוצא לביצוע רק כאשר הבקרה מגיעה לענף המקיף שלו. סולם מקושר בוחר את התנאי האמיתי הראשון; 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, שם הבדיקה הפנימית עשויה להתבצע.