Cześć! Dzisiejsza lekcja nie będzie długa, ale na pewno się przyda :) Porozmawiamy o tzw. operatorze trójskładnikowym .
Trójskładnikowy oznacza „ składający się z trzech części ”. Jest to alternatywa dla
Przy okazji, nawiasy wokół warunku nie są wymagane: dodaliśmy je dla większej czytelności. Działa również bez nich:
Łą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.

if-else
instrukcji 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 Person
klasę i sprawdźmy to za pomocą if-else
instrukcji:
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 usherResponse
jeden 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!” )
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 
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-else
czy 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-else
stwierdzeń (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-else
instrukcji. 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.
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. 
Więcej czytania: |
---|
GO TO FULL VERSION