JavaRush /Blog Java /Random-PL /Operator trójskładnikowy w Javie

Operator trójskładnikowy w Javie

Opublikowano w grupie Random-PL
Cześć! Dzisiejszy wykład nie będzie bardzo długi, ale na pewno przydatny :) Porozmawiamy o tzw. operatorze trójskładnikowym . Operator trójskładnikowy - 1„Trójskładnikowy” oznacza „potrójny”. Jest to alternatywa dla operatora warunkowego if-else, który już znasz. Podajmy przykład. Załóżmy, że ktoś decyduje się pójść do kina na film z oceną 18+. Strażnik przy wejściu sprawdza jego wiek: jeśli spełnia wymagany wiek, wpuszcza go na salę, jeśli nie, odsyła go do domu. Stwórzmy klasę Mani sprawdźmy ją za pomocą 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 = – Wszystko w porządku, wejdź!;
       } else {
           securityAnswer = "Ten film nie jest odpowiedni dla twojego wieku!";
       }

       System.out.println(securityAnswer);

   }
}
Wyjście konsoli:

"Все в порядке, проходите!"
Jeśli usuniemy dane wyjściowe do konsoli, nasz test będzie wyglądał następująco:
if (man.getAge() >= 18) {
           securityAnswer = – Wszystko w porządku, wejdź!;
       } else {
           securityAnswer = "Ten film nie jest odpowiedni dla twojego wieku!";
       }
Tutaj faktycznie działa prosta logika: sprawdzany jest jeden warunek (wiek >= 18). W zależności od tego securityAnswerdo zmiennej przypisywany jest jeden z dwóch ciągów znaków z odpowiedzią strażnika. Takie sytuacje „jeden warunek – dwa możliwe wyniki” zdarzają się bardzo często w programowaniu. Dlatego też stworzono dla nich ten sam operator trójskładnikowy. Dzięki niemu możemy uprościć naszą weryfikację do jednej linijki kodu:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = (man.getAge() >= 18) ? – Wszystko w porządku, wejdź! : "Ten film nie jest odpowiedni dla twojego wieku!";

   System.out.println(securityAnswer);

}
Tak wygląda praca tego operatora. Nazywa się go potrójnym (potrójnym), ponieważ w jego pracy biorą udział 3 elementy:
  • Jeden warunek ( man.getAge() >= 18)
  • Dwa możliwe wyniki ( „W porządku, kontynuuj!” i „Ten film nie jest odpowiedni dla twojego wieku!” )
Najpierw w kodzie zapisywany jest warunek, po którym następuje znak zapytania.
man.getAge() >= 18 ?
„Czy wiek danej osoby jest większy lub równy 18 lat?” Poniżej znajduje się pierwszy wynik. Uruchamia się, jeśli warunek powróci true, to znaczy jest prawdziwy:
String securityAnswer = man.getAge() >= 18 ? – Wszystko w porządku, wejdź!
Czy wiek danej osoby jest większy lub równy 18 lat? Jeśli tak, przypisz zmiennej securityAnswer wartość „Wszystko w porządku, proszę wejść!” . Po tym następuje :operator „ ”, po którym zapisywany jest drugi wynik. Uruchamia się, jeśli warunek powróci false, to znaczy jest fałszywy:
String securityAnswer = man.getAge() >= 18 ? – Wszystko w porządku, wejdź! : "Ten film nie jest odpowiedni dla twojego wieku!";
Czy wiek danej osoby jest większy lub równy 18 lat? Jeśli tak, przypisz zmiennej securityAnswer wartość „Wszystko w porządku, proszę wejść!” . Jeżeli nie, przypisz zmiennej securityAnswer wartość „Ten film nie jest odpowiedni dla Twojego wieku!” Tak wygląda ogólna logika operatora trójskładnikowego. stan : schorzenie ? wynik 1 : wynik 2 Operator trójskładnikowy - 2Nawiasem mówiąc, nie ma potrzeby umieszczania warunku w nawiasach: zrobiliśmy to dla większej czytelności. Obejdzie się bez nich:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = man.getAge() >= 18 ? – Wszystko w porządku, wejdź! : "Ten film nie jest odpowiedni dla twojego wieku!";

   System.out.println(securityAnswer);

}
Czego powinieneś użyć: if-else, lub operatora trójskładnikowego? Jeśli chodzi o wydajność, nie ma dużej różnicy. Dokładniej, może istnieć, ale jest nieistotny. Tutaj pytanie dotyczy raczej czytelności twojego kodu. W programowaniu jest to niezwykle ważne: pisany przez Ciebie kod musi nie tylko działać poprawnie, ale także być łatwy do odczytania. W końcu można go „odziedziczyć” innym programistom, Twoim współpracownikom! A jeśli będzie to trudne do zrozumienia, skomplikuje to zarówno ich, jak i Twoją pracę – będą biegać do Ciebie po wyjaśnienia co 5 minut. Ogólne zalecenie może brzmieć tak: jeśli warunek jest prosty i łatwy do sprawdzenia, możesz bez szkody używać operatora trójskładnikowego. W ten sposób zmniejszysz ilość kodu i liczbę kontroli if-else, których może być już dużo. Jeśli jednak stan jest złożony i wieloetapowy, lepiej zastosować if-else. Na przykład w tym przypadku złym pomysłem byłoby użycie operatora trójskładnikowego:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild())  ? "Wejdź!" : "Nie możesz przejść!";
Więc nie od razu zrozumiesz, co się tutaj dzieje! Kod stał się bardzo trudny do odczytania. A wszystko przez trudną sytuację:
  • Jeżeli osoba ma ukończone 18 lat + posiada bilet (lub posiada kupon na bezpłatne wejście) + nie ma ze sobą małych dzieci - wówczas może przejść.
  • Jeśli przynajmniej jedna część warunku zwróci wartość false, oznacza to, że nie jest to możliwe.
W tym miejscu zdecydowanie lepiej byłoby użyć if-else. Tak, nasz kod byłby większy, ale byłby wielokrotnie bardziej czytelny. I nikt z Twoich kolegów nie będzie się trzymał za głowę, jeśli odziedziczy taki kod :) Na koniec mogę polecić Ci książkę. Na wykładzie poruszyliśmy temat czytelności kodu. Jej dedykowana jest klasyczna książka „Czysty kod” Roberta Martina. Operator trójskładnikowy - 3Zawiera najlepsze praktyki i rekomendacje dla programistów, które pozwolą Ci napisać nie tylko działający, ale i łatwy do odczytania kod. Recenzja tej książki znajduje się na JavaRush.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION