Ternärer Operator In Java

1. Übersicht

Der ternäre bedingte Operator ?: Ermöglicht die Definition von Ausdrücken in Java. Es ist eine komprimierte Form der if-else- Anweisung, die auch einen Wert zurückgibt.

In diesem Tutorial erfahren Sie, wann und wie Sie ein ternäres Konstrukt verwenden. Wir werden zunächst die Syntax betrachten und anschließend die Verwendung untersuchen.

2. Syntax

Der ternäre Operator ?: In Java ist der einzige Operator, der drei Operanden akzeptiert :

booleanExpression ? expression1 : expression2

Der allererste Operand muss ein boolescher Ausdruck sein, der zweite und der dritte Operand können beliebige Ausdrücke sein, die einen Wert zurückgeben. Das ternäre Konstrukt gibt expression1 als Ausgabe zurück, wenn der erste Operand true ergibt , andernfalls expression2 .

3. Beispiel für einen ternären Operator

Betrachten wir das folgende if-else- Konstrukt:

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

Im obigen Code haben wir msg einen Wert zugewiesen, der auf der bedingten Auswertung von num basiert . Wir können diesen Code lesbarer und sicherer machen, indem wir die if-else- Anweisung einfach durch ein ternäres Konstrukt ersetzen :

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

4. Expressionsbewertung

Bei Verwendung eines ternären Java-Konstrukts wird zur Laufzeit nur einer der Ausdrücke auf der rechten Seite ausgewertet, dh entweder expression1 oder expression2 .

Wir können das testen, indem wir einen einfachen JUnit- Testfall schreiben :

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

Unser boolescher Ausdruck 12> 10 wird immer als wahr ausgewertet , sodass der Wert von exp2 unverändert bleibt. Betrachten wir in ähnlicher Weise, was bei einer falschen Bedingung passiert :

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

Der Wert von exp1 blieb unberührt und der Wert von exp2 wurde um 1 erhöht.

5. Verschachteln des ternären Operators

Es ist uns möglich, unseren ternären Operator auf einer beliebigen Anzahl von Ebenen unserer Wahl zu verschachteln. Also das Konstrukt:

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

ist gültig in Java. Um die Lesbarkeit des obigen Codes zu verbessern, können wir bei Bedarf geschweifte Klammern () verwenden :

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

Beachten Sie jedoch , dass es nicht empfohlen wird, solche tief verschachtelten ternären Konstrukte in der realen Welt zu verwenden. Dies ist so, da der Code dadurch weniger lesbar und schwer zu warten ist.

6. Fazit

In diesem kurzen Tutorial haben wir den ternären Operator in Java kennengelernt. Es ist nicht möglich, jedes if-else- Konstrukt durch einen ternären Operator zu ersetzen . In einigen Fällen ist es jedoch ein großartiges Tool, das unseren Code viel kürzer und lesbarer macht.

Wie üblich ist der gesamte Quellcode über Github verfügbar.