Operator trójskładnikowy w Javie

1. Przegląd

Trójskładnikowy operator warunkowy ?: Pozwala nam definiować wyrażenia w Javie. Jest to skondensowana forma instrukcji if-else , która również zwraca wartość.

W tym samouczku dowiemy się, kiedy i jak używać konstrukcji trójskładnikowej. Zaczniemy od przyjrzenia się jego składni, a następnie zbadania jego zastosowania.

2. Składnia

Operator trójskładnikowy ?: W Javie jest jedynym operatorem, który akceptuje trzy operandy :

booleanExpression ? expression1 : expression2

Pierwszy operand musi być wyrażeniem logicznym , drugi i trzeci operand może być dowolnym wyrażeniem, które zwraca pewną wartość. Konstrukcja trójskładnikowa zwraca wyrażenie1 jako dane wyjściowe, jeśli wynik pierwszego operandu to prawda , w przeciwnym razie wyrażenie2 .

3. Przykład operatora trójskładnikowego

Rozważmy poniższą konstrukcję if-else :

int num = 8; String msg = ""; if(num > 10) { msg = "Number is greater than 10"; } else { msg = "Number is less than or equal to 10"; }

W powyższym kodzie przypisaliśmy wartość msg na podstawie warunkowej oceny num . Możemy uczynić ten kod bardziej czytelnym i bezpiecznym, zastępując instrukcję if-else konstrukcją trójskładnikową:

final String msg = num > 10 ? "Number is greater than 10" : "Number is less than or equal to 10";

4. Ocena wyrażenia

W przypadku korzystania z trójskładnikowej konstrukcji Java tylko jedno z wyrażeń po prawej stronie, tj. Wyrażenie1 lub wyrażenie2, jest oceniane w czasie wykonywania .

Możemy to sprawdzić, pisząc prosty przypadek testowy JUnit :

@Test public void whenConditionIsTrue_thenOnlyFirstExpressionIsEvaluated() { int exp1 = 0, exp2 = 0; int result = 12 > 10 ? ++exp1 : ++exp2; assertThat(exp1).isEqualTo(1); assertThat(exp2).isEqualTo(0); assertThat(result).isEqualTo(1); }

Nasze wyrażenie boolowskie 12> 10 zawsze zwraca prawdę, więc wartość exp2 pozostała bez zmian . Podobnie, zastanówmy się, co dzieje się w przypadku fałszywego warunku:

@Test public void whenConditionIsFalse_thenOnlySecondExpressionIsEvaluated() { int exp1 = 0, exp2 = 0; int result = 8 > 10 ? ++exp1 : ++exp2; assertThat(exp1).isEqualTo(0); assertThat(exp2).isEqualTo(1); assertThat(result).isEqualTo(1); }

Wartość exp1 pozostała niezmieniona, a wartość exp2 zwiększono o 1.

5. Zagnieżdżanie operatorów trójskładnikowych

Możliwe jest zagnieżdżenie naszego operatora trójskładnikowego na dowolnej liczbie wybranych przez nas poziomów. Więc konstrukt:

String msg = num > 10 ? "Number is greater than 10" : num > 5 ? "Number is greater than 5" : "Number is less than equal to 5";

działa w Javie. Aby poprawić czytelność powyższego kodu , w razie potrzeby możemy użyć nawiasów klamrowych () :

String msg = num > 10 ? "Number is greater than 10" : (num > 5 ? "Number is greater than 5" : "Number is less than equal to 5");

Jednakże , należy pamiętać, że nie jest to zalecane, aby korzystać z takich głęboko zagnieżdżonych trójskładnikowych konstrukty w realnym świecie. Dzieje się tak, ponieważ sprawia, że ​​kod jest mniej czytelny i trudny w utrzymaniu.

6. Wniosek

W tym krótkim samouczku dowiedzieliśmy się o operatorze trójargumentowym w Javie. Nie jest możliwe zastąpienie każdej konstrukcji if-else operatorem trójskładnikowym. Jednak w niektórych przypadkach jest to świetne narzędzie i sprawia, że ​​nasz kod jest znacznie krótszy i czytelny.

Jak zwykle cały kod źródłowy jest dostępny na Github.