CodeGym /בלוג Java /Random-HE /מפעיל Java Ternary
John Squirrels
רָמָה
San Francisco

מפעיל Java Ternary

פורסם בקבוצה
היי! השיעור של היום לא יהיה ארוך במיוחד, אבל הוא בהחלט יהיה שימושי :) אנחנו הולכים לדבר על מה שנקרא אופרטור טריני . מפעיל טריני - 1טרנרי פירושו " מורכב משלושה חלקים ". זוהי חלופה להצהרת 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 מפעיל טריני - 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. כן, הקוד שלנו יהיה גדול יותר, אבל הוא יהיה הרבה יותר קריא. והקולגות שלך לא יתמודדו עם כף היד אם הם ירשו את הקוד הזה :) לבסוף, אני יכול להמליץ ​​לך על טוב. נגענו בקריאות הקוד במהלך השיעור. ספרו של רוברט מרטין "קוד נקי", שהפך לקלאסיקה, מוקדש לנושא זה. מפעיל טריני - 4הוא מאגד שיטות עבודה מומלצות והמלצות למתכנתים, שיעזרו לכם לכתוב קוד שהוא לא רק פונקציונלי, אלא גם קריא בקלות.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION