משפטי IF קצרים יותר ב-Java

[22 בנובמבר 2008] [5 תגובות]

ניתן לקצר משפטי If ב-Java ולהפוך אותם לשורה אחת בלבד.

הבהרה: הקוד שהופיע תוקן - תודה לאיתי.

הארוך 

נביט בקוד הבא המשווה בין הערכים של המשתנים a ו-b ומדפיס תשובה בהתאם:

if (a>b){
        System.Out.println("A is bigger than B");
}
else{
        System.Out.println("A is NOT bigger than B");
}

נשים לב שעבור פעולה פשוטה צריך בערך 3-5 פקודות.

הקצר 

נשתמש באופרטור סימן השאלה (Conditional Operator) על מנת לקצר את המשפט כך:

System.out.println ((a>b) ? "A is bigger than B" : "A is NOT bigger than B");

האופרטור עובד כך: ישנה שאלה (a>b), לאחר מכן סימן שאלה (?), לאחר מכן פעולה עבור תשובה חיובית ("A is bigger than B"), אחר כך נקודותיים (:) ואז לבסוף פעולה עבור תשובה שלילית ("A is NOT bigger than B").

יש הטוענים שביטויים כאלו הופכים את הקוד לפחות קריא ולכן צריך לדעת מתי להשתמש באופרטור זה. אני ממליץ להשתמש בו במידה והקוד בתוך ה-If ו-Else מכיל פקודה מנוגדת אחת בלבד.

אומנם התחביר נראה קצת לא קשור ל-Java אך זהו אופרטור שימושי.

אם אהבת את הפוסט, אני שולח מדי פעם למייל עוד פוסטים מעניינים שלא תמיד מגיעים להתפרסם באתר. אתה מוזמן להצטרף לרשימה:
(אני שונא ספאם. אני מבטיח לעולם לא לשלוח משהו לא מעניין)

5 תגובות

  1. איתי | 11/23/2008 1:14:25 AM

    אופטור טרינארי הוא באמת אחד השימושיים, משתמשים בו כאשר מדובר במשפטים קצרים יחסית, ומטרה מוגדרת.

     יצא לי לעבוד עם האופטור הזה כאשר האופטור בתוך אופטור בתוך אופטור היה יותר מסודר מהשימוש ללא האופטור...

    בכל מקרה ציפיתי לפוסט קצת יותר מעמיק, אבל לא נורא^^''

  2. איתי | 11/24/2008 5:19:06 AM

    חזרתי לקרוא שוב כי היה משהו שהפריע לי:

    conditio ? true : false

    אתה עשית הפוך, כתבת את הערך השלילי קודם לכן (לפחות על פי PHP).

  3. טל | 11/25/2008 3:27:26 AM

    תודה איתי, אתה לגמרי צודק... זה תופעות לוואי של כתיבת פוסטים תחת עייפות

    מזל שיש תגובות :)

  4. | 12/1/2008 3:07:32 PM

    השיטה טובה בעיקר במקרים שאתה כותב את הקוד עבור עצמך.
    במקרה שאתה צריך להעביר למישהו את הקוד - אתה חייב להוסיף מספיק הערות שיסבירו.
    מבחינת קריאות הקוד - השיטה הזו די מקשה, אבל מקצרת את התוכנית.

    אם זה בשביל עצמך, ואכן יש לתנאי מטרה ברורה ומוגדרת והוא לא מסובך מדי - זה יכול לעזור.

     

    אבל כל הכבוד על המדריך והבלוג בכלל, הוא מכיל תוכן יעיל ושימושי.

    תודה רבה!

  5. רפאל | 6/6/2011 11:40:27 PM

      שימוש ב inline if  ( כך זה נקרה נראה לי ב C# )    בהחלט יכול להיות יעיל ואלגנטי במקרי קוד קצרים ופשוטים להבנה

    System.out.println((a>b)?a:b);  // this code will print the bigger number

התגובות נעולות