CodeGym /Blog Java /Random-PL /Operator trójskładnikowy
Autor
Vasyl Malik
Senior Java Developer at CodeGym

Operator trójskładnikowy

Opublikowano w grupie Random-PL
Cześć! Dzisiejsza lekcja nie będzie długa, ale na pewno się przyda :) Porozmawiamy o tzw. operatorze trójskładnikowym . Operator trójskładnikowy - 1Trójskładnikowy oznacza „ składający się z trzech części ”. Jest to alternatywa dla if-elseinstrukcji sterowania przepływem, którą już poznałeś. Podajmy przykład. Załóżmy, że ktoś zdecydował się pójść na film z kategorią R (poniżej 17 lat wymaga obecności rodzica lub dorosłego opiekuna). Woźny sprawdza swój wiek przy drzwiach: jeśli zdał kontrolę wieku, może wejść; jeśli nie, zostaje odesłany do domu. Zadeklarujmy Personklasę i sprawdźmy to za pomocą if-elseinstrukcji:

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);

   }
}
Wyjście konsoli:

"Everything is in order. Come in!"
Jeśli usuniemy wyjście konsoli, to nasze sprawdzenie wygląda następująco:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
Logika jest tu bardzo prosta: sprawdzany jest jeden warunek (wiek >= 18 lat) Na podstawie wyniku przypisuje się zmiennej usherResponsejeden z dwóch ciągów z odpowiedzią woźnego. Takie sytuacje („jeden warunek – dwa możliwe wyniki”) są niezwykle powszechne w programowaniu. I dlatego powstał operator trójskładnikowy. Możemy go użyć, aby uprościć nasze sprawdzanie do pojedynczej linii kodu:

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);

}
Oto jak działa ten operator. Nazywa się to operatorem trójskładnikowym, ponieważ obejmuje 3 komponenty:
  • Jeden warunek ( person.getAge() > 18)
  • Dwa możliwe wyniki ( „Wszystko jest w porządku. Wejdź!” i „Ten film nie jest odpowiedni dla twojego wieku!” )
Najpierw piszemy warunek, a następnie znak zapytania.

person.getAge() > 18 ?
„Czy ta osoba ma więcej niż 18 lat?” Następnie zapisujemy pierwszą wartość . Ta wartość jest używana, jeśli warunek ma wartośćtrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
Czy ta osoba ma więcej niż 18 lat? Jeśli tak, ustaw usherResponse zmienną na „Wszystko w porządku. Wejdź!” Następnie pojawia się symbol " :" i druga wartość . Ta wartość jest używana, jeśli warunek ma wartośćfalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
Czy ta osoba ma więcej niż 18 lat? Jeśli tak, ustaw usherResponse zmienną na „Wszystko w porządku. Wejdź!” . Jeśli nie, ustaw usherResponse zmienną na „Ten film nie jest odpowiedni dla twojego wieku!” Ogólnie, oto jak wygląda logika operatora trójskładnikowego. stan : schorzenie ? wynik 1 : wynik 2 Operator trójskładnikowy - 2 Przy okazji, nawiasy wokół warunku nie są wymagane: dodaliśmy je dla większej czytelności. Działa również bez nich:

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);

}
Więc czego powinieneś użyć? Instrukcja if-elseczy operator trójskładnikowy? Jeśli chodzi o wydajność, nie ma różnicy. Dokładniej, może i jest, ale jest to nieistotne. Najważniejszą kwestią jest tutaj czytelność kodu. Kod, który piszesz, musi nie tylko działać poprawnie, ale także być łatwy do odczytania . W końcu może zostać „odziedziczony” przez innych programistów, twoich kolegów! Jeśli jest to trudne do zrozumienia, skomplikuje to ich pracę i twoją (co 5 minut przybiegną do ciebie po wyjaśnienia). Ogólne zalecenie jest następujące: jeśli warunek jest prosty i łatwy do zweryfikowania, możesz użyć operatora trójskładnikowego bez szkody. Pozwala to zmniejszyć ilość kodu i liczbęif-elsestwierdzeń (a może być ich już wiele). Ale jeśli warunek jest złożony i obejmuje wiele kroków, lepiej jest użyć if-elseinstrukcji. Na przykład użycie operatora trójskładnikowego byłoby w tym przypadku złym pomysłem:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Nie od razu widać, co się tutaj dzieje! Kod stał się bardzo trudny do odczytania. A wszystko z powodu złożonego stanu:
  • Jeśli ktoś ma więcej niż 18 lat, ma bilet (lub bezpłatny karnet) i nie ma małych dzieci, może wejść.
  • Jeśli choć jedna część warunku jest fałszywa, to nie może.
Tutaj wyraźnie lepiej jest użyć if-else. Tak, nasz kod będzie większy, ale będzie dużo bardziej czytelny. A twoi koledzy nie będą gadać, jeśli odziedziczą ten kod :) Na koniec mogę polecić coś dla ciebie. Podczas lekcji poruszyliśmy temat czytelności kodu. Temu tematowi poświęcona jest książka Roberta Martina „Czysty kod”, która stała się już klasykiem. Operator trójskładnikowy - 4Łączy w sobie najlepsze praktyki i rekomendacje dla programistów, które pomogą Ci napisać kod, który jest nie tylko funkcjonalny, ale także czytelny.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION