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

if-else
זרימת הבקרה שכבר פגשת. בואו ניתן דוגמה. נניח שמישהו החליט ללכת לסרט בדירוג R (מתחת לגיל 17 מצריך הורה מלווה או אפוטרופוס מבוגר). הסדרן בודק את גילו בפתח: אם עבר את בדיקת הגיל, מותר לו להיכנס; אם לא, הוא נשלח הביתה. בואו נכריז על Person
מחלקה ונבדוק זאת באמצעות if-else
הצהרה:
public class Person {
private int age;
public Person(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse;
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
System.out.println(usherResponse);
}
}
פלט מסוף:
"Everything is in order. Come in!"
אם נסיר את פלט הקונסולה, הבדיקה שלנו נראית כך:
if (person.getAge() >= 18) {
usherResponse = "Everything is in order. Come in!";
} else {
usherResponse = "This film is not suitable for your age!";
}
ההיגיון כאן מאוד פשוט: תנאי אחד נבדק (גיל >= 18) על סמך התוצאה, המשתנה usherResponse
מקבל אחת משתי מחרוזות עם תגובת הסדרן. מצבים כאלה ("תנאי אחד - שתי תוצאות אפשריות") נפוצים ביותר בתכנות. ובגלל זה נוצר האופרטור השלישוני. אנחנו יכולים להשתמש בו כדי לפשט את הבדיקה שלנו לשורה אחת של קוד:
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
הנה איך המפעיל הזה עובד. זה נקרא האופרטור הטרינרי, מכיוון שהוא כולל 3 מרכיבים:
- תנאי אחד (
person.getAge() > 18
) - שתי תוצאות אפשריות ( "הכל מסודר. היכנס!" ו"הסרט הזה לא מתאים לגילך!" )
person.getAge() > 18 ?
"האם גילו של האדם הזה יותר מ-18?" אז נכתוב את הערך הראשון . ערך זה משמש אם התנאי מוערך לtrue
:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
האם גילו של אדם זה יותר מ-18? אם כן, הגדר את usherResponse
המשתנה ל"הכל בסדר. היכנס!" לאחר מכן מגיעים הסמל " :
" והערך השני . ערך זה משמש אם התנאי מוערך לfalse
:
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
האם גילו של אדם זה יותר מ-18? אם כן, הגדר את usherResponse
המשתנה ל"הכל בסדר. היכנס!" . אם לא, הגדר את usherResponse
המשתנה ל"הסרט הזה לא מתאים לגילך!" באופן כללי, כך נראה ההיגיון של האופרטור השלישוני. מצב? תוצאה 1 : תוצאה 2 
public static void main(String[] args) {
Person person = new Person(22);
String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
System.out.println(usherResponse);
}
אז במה כדאי להשתמש? הצהרה if-else
או האופרטור השלישוני? מבחינת ביצועים, אין הבדל. יותר נכון, אולי יש, אבל זה לא משמעותי. השיקול הגדול ביותר כאן הוא הקריאות של הקוד שלך. הקוד שאתה כותב חייב לא רק לעבוד כהלכה, אלא גם להיות קל לקריאה . אחרי הכל, זה עלול לעבור בירושה על ידי מתכנתים אחרים, הקולגות שלך! אם קשה להבין, זה יסבך את העבודה שלהם ושלך (כל 5 דקות יבואו אלייך בריצה להסברים). ההמלצה הכללית היא כזו: אם המצב פשוט וקל לאימות, אתה יכול להשתמש באופרטור השלישוני ללא נזק. זה מאפשר לך להפחית את כמות הקוד ואת מספר if-else
ההצהרות (ואולי כבר יש הרבה כאלה). אבל אם המצב מורכב וכולל מספר שלבים, עדיף להשתמש בהצהרה if-else
. לדוגמה, שימוש באופרטור טרינרי יהיה רעיון רע במקרה זה:
String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
לא ברור מיד מה קורה כאן! הקוד הפך לקשה מאוד לקריאה. והכל בגלל המצב המורכב:
- אם מישהו מעל גיל 18, יש לו כרטיס (או כרטיס חינם), ואין לו ילדים קטנים, הוא יכול להיכנס.
- אם אפילו חלק אחד מהמצב שקרי, אז הוא לא יכול.
if-else
. כן, הקוד שלנו יהיה גדול יותר, אבל הוא יהיה הרבה יותר קריא. והקולגות שלך לא יתמודדו עם כף היד אם הם ירשו את הקוד הזה :) לבסוף, אני יכול להמליץ לך על טוב. נגענו בקריאות הקוד במהלך השיעור. ספרו של רוברט מרטין "קוד נקי", שהפך לקלאסיקה, מוקדש לנושא זה. 
GO TO FULL VERSION