Ternärer Operator in Java

Ternärer Operator In Java

1. Überblick

Mit dem ternären bedingten Operator?: können wir Ausdrücke in Java definieren. It’s a condensed form of the if-else statement that also returns a value.

In diesem Tutorial erfahren Sie, wann und wie Sie ein ternäres Konstrukt verwenden. Wir beginnen mit der Syntax und untersuchen anschließend die Verwendung.

2. Syntax

Der ternäre Operator?: in Java istthe only operator which accepts three operands:

booleanExpression ? expression1 : expression2

Der allererste Operand muss einboolean-Ausdruck sein, der zweite und der dritte Operand können beliebige Ausdrücke sein, die einen Wert zurückgeben. Das ternäre Konstrukt gibtexpression1 als Ausgabe zurück, wenn der erste Operandtrue ergibt, andernfallsexpression2.

3. Beispiel für einen ternären Operator

Betrachten wir das Konstrukt vonif-elseunten:

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 wirmsg einen Wert zugewiesen, der auf der bedingten Auswertung vonnum basiert. Wir können diesen Code lesbarer und sicherer machen, indem wir die Anweisungif-elseeinfach 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

When using a Java ternary construct, only one of the right-hand side expressions i.e. either expression1 or expression2 is evaluated at runtime.

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

@Test
public void whenConditionIsTrue_thenOnlyExpression1IsEvaluated() {
    int exp1 = 0, exp2 = 0;
    int result = 12 > 10 ? ++exp1 : ++exp2;

    assertThat(exp1).isEqualTo(1);
    assertThat(exp2).isEqualTo(0);
    assertThat(result).isEqualTo(1);
}

Unserboolean-Ausdruck12 > 10 wird immer zutrue, ausgewertet, sodass der Wert vonexp2 unverändert bleibt. Betrachten wir in ähnlicher Weise, was für einenfalse-Zustand passiert:

@Test
public void whenConditionIsFalse_thenOnlyExpression2IsEvaluated() {
    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 vonexp1 blieb unberührt, und der Wert vonexp2 wurde um 1 erhöht.

5. Verschachtelter ternärer Operator

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 in Java gültig. 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");

Bitte beachten Sie jedoch, dass, nicht empfohlen werden, solche tief verschachtelten ternären Konstrukte in der realen Welt zu verwenden. Dies ist so, da der Code weniger lesbar und schwierig zu warten ist.

6. Fazit

In diesem kurzen Tutorial haben wir den ternären Operator in Java kennengelernt. Es ist nicht möglich, jedesif-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 Quellcodeover on Github verfügbar.