JavaRush /Java блогы /Random-KK /Java тіліндегі үштік оператор

Java тіліндегі үштік оператор

Топта жарияланған
Сәлеметсіз бе! Бүгінгі дәріс өте ұзақ болмайды, бірақ сөзсіз пайдалы :) Біз үштік оператор деп аталатын туралы сөйлесетін боламыз . Үштік оператор – 1«Үштік» «үштік» дегенді білдіреді. if-elseБұл сізге бұрыннан таныс шартты операторға балама . Мысал келтірейік. 18+ рейтингі бар фильмді көру үшін адам кинотеатрға баруды шешті делік. Күзетші оның жасын кіре берісте тексереді: егер ол жас шегіне сәйкес келсе, залға кіруге рұқсат береді, егер жоқ болса, оны үйіне жібереді. Класс жасап Man, оны келесімен тексерейік if-else:
public class Man {

   private int age;

   public Man(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Man man = new Man(22);

       String securityAnswer;

       if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }

       System.out.println(securityAnswer);

   }
}
Консоль шығысы:

"Все в порядке, проходите!"
Егер біз шығысты консольге алып тастасақ, тестіміз келесідей болады:
if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }
Мұнда, шын мәнінде, қарапайым логика жұмыс істейді: бір шарт тексеріледі (жасы >= 18). Осыған байланысты securityAnswerайнымалыға күзетшінің жауабы бар екі жолдың біреуі тағайындалады. Мұндай жағдайлар, «бір шарт – екі ықтимал нәтиже» бағдарламалауда жиі кездеседі. Сондықтан олар үшін бірдей үштік оператор құрылды. Оның көмегімен біз тексеруді codeтың бір жолына жеңілдете аламыз:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = (man.getAge() >= 18) ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
Бұл оператордың жұмысы осылай көрінеді. Оны үштік (үштік) деп атайды, өйткені оның жұмысына 3 компонент қатысады:
  • Бір шарт ( man.getAge() >= 18)
  • Екі ықтимал нәтиже ( «Жарайды, алға!» және «Бұл фильм сіздің жасыңызға сай емес!» )
Алдымен codeта шарт жазылады, одан кейін сұрақ белгісі қойылады.
man.getAge() >= 18 ?
«Адамның жасы 18-ден үлкен бе, әлде оған тең бе?» Келесі бірінші нәтиже. Егер шарт қайтарылса true, ол іске қосылады, яғни шын болса:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!"
Адамның жасы 18-ден үлкен бе әлде оған тең бе? Егер иә болса, айнымалыға «Бәрі жақсы, кіріңіз!»securityAnswer мәнін беріңіз. . Одан кейін « » операторы келеді :, одан кейін екінші нәтиже жазылады. Шарт қайтарылса false, ол іске қосылады, яғни ол жалған:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
Адамның жасы 18-ден үлкен бе әлде оған тең бе? Егер иә болса, айнымалыға «Бәрі жақсы, кіріңіз!»securityAnswer мәнін беріңіз. . Олай болмаса, айнымалы мәнге «Бұл фильм сіздің жасыңызға сәйкес келмейді!»securityAnswer мәнін тағайындаңыз. Үштік оператордың жалпы логикасы осылай көрінеді. жағдайы? Нәтиже 1 : нәтиже 2 Үштік оператор – 2Айтпақшы, шарттың айналасында жақшаларды қоюдың қажеті жоқ: біз мұны жақсырақ оқылу үшін жасадық. Оларсыз жұмыс істейді:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
Нені пайдалану керек: if-else, немесе үштік оператор? Өнімділік тұрғысынан айтарлықтай айырмашылық жоқ. Дәлірек айтқанда, ол бар болуы мүмкін, бірақ ол мардымсыз. Мұнда мәселе сіздің codeыңыздың оқылу мүмкіндігіне қатысты. Бағдарламалауда бұл өте маңызды: сіз жазған code дұрыс жұмыс істеп қана қоймай, сонымен қатар оқуға оңай болуы керек. Өйткені, ол басқа бағдарламашыларға, сіздің әріптестеріңізге «мұра» болуы мүмкін! Ал егер түсіну қиын болса, бұл олардың да, сіздің де жұмысыңызды қиындатады - олар әр 5 minutes сайын сізге түсініктеме алу үшін жүгіреді. Жалпы ұсыныс келесідей болуы мүмкін: шарт қарапайым және тексеру оңай болса, үштік операторды зиянсыз пайдалануға болады. Осылайша сіз codeтың көлемін және чектердің санын азайтасыз if-else, олардың көп болуы мүмкін. Бірақ егер жағдай күрделі және көп сатылы болса, оны қолданған дұрыс if-else. Мысалы, бұл жағдайда үштік операторды пайдалану жаман идея болар еді:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild())  ? "Come in!" : "You can not pass!";
Сондықтан мұнда не болып жатқанын бірден түсіне алмайсыз! Кодты оқу өте қиын болды. Және бәрі қиын жағдайға байланысты:
  • Егер адам 18 жастан асқан немесе оған тең болса + билеті болса (немесе тегін кіруге арналған купоны болса) + қасында кішкентай балалары болмаса - олар өте алады.
  • Шарттың кем дегенде бір бөлігі жалған болып қайтарылса, ол мүмкін емес.
Дәл осы жерде қолданған дұрыс болар еді if-else. Иә, біздің code көлемі жағынан үлкенірек болар еді, бірақ ол бірнеше есе оқуға болатын еді. Әріптестеріңіздің ешқайсысы мұндай codeты мұраға алса, бастарын қыспайды :) Ақырында, мен сізге кітапты ұсына аламын. Дәрісте біз codeты оқу мүмкіндігі тақырыбын қозғадық. Роберт Мартиннің классикалық кітабы «Таза code» оған арналған. Үштік оператор – 3Онда тек жұмыс істеп қана қоймай, оқуға оңай codeты жазуға мүмкіндік беретін бағдарламашыларға арналған ең жақсы тәжірибелер мен ұсыныстар бар. JavaRush-те бұл кітапқа шолу бар .
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION