CodeGym /Kurse /JAVA 25 SELF /Der ternäre Operator in Java: prägnante Bedingungen und F...

Der ternäre Operator in Java: prägnante Bedingungen und Feinheiten

JAVA 25 SELF
Level 3, Lektion 5
Verfügbar

1. Ausdrücke vs. Anweisungen

Alle Anweisungen in Java lassen sich in zwei Kategorien einteilen: Anweisungen (Statement) und Ausdrücke (Expression). Über eine Anweisung sagt man typischerweise, dass sie ausgeführt wird, über einen Ausdruck – dass er ausgewertet wird. Aber das ist nicht das Wichtigste.

Der Hauptunterschied zwischen Anweisung und Ausdruck besteht darin, dass ein Ausdruck ein Auswertungsergebnis hat. Dieses Ergebnis hat erstens einen Typ, und zweitens kann man es einer Variablen zuweisen oder in einem anderen Ausdruck verwenden.

Beispiele:

Code Hinweise
int x;
Anweisung
(a < 10)
Ausdruck, Typ boolean
i++;
Ausdruck, der Typ entspricht dem Typ der Variablen i
x = 5;
Ausdruck, der Typ entspricht dem Typ der Variablen x

Und was bringt uns das?

Erstens können wir den Umstand nutzen, dass sehr viele Anweisungen in Wirklichkeit Ausdrücke sind (ein Auswertungsergebnis liefern). Zum Beispiel funktioniert folgender Code:

int x, y, z; 
x = y = z = 1; 	// x = (y = (z = 1));

Zweitens können wir das Ergebnis der Auswertung ignorieren, wenn wir möchten.

console.nextLine();	// Ergebnis der Eingabe ignorieren

Das Ignorieren des Auswertungsergebnisses ist z. B. dann nötig, wenn der Ausdruck neben dem Ergebnis noch etwas Nützliches bewirkt und uns diese Nebenwirkung wichtig ist, das Ergebnis aber nicht.

2. Der ternäre Operator

Ternärer Operator in Javar

Dieser Lifehack ist schon interessanter als der vorherige. In Java gibt es einen speziellen ternären (dreifachen) Operator. Er ähnelt in gewisser Weise der Kurzschreibweise des Operators if–else:


condition ? expression1 : expression2;
Syntax des ternären Operators

Ist die Bedingung wahr, wird Ausdruck 1 ausgeführt, andernfalls wird Ausdruck 2 ausgeführt. Auf die Bedingung folgt ein Fragezeichen, die beiden Ausdrücke sind durch einen Doppelpunkt getrennt.

Der Hauptunterschied zwischen dem ternären Operator und dem Operator if-else besteht darin, dass der ternäre Operator ein Ausdruck ist – sein Ergebnis kann also einer Variablen zugewiesen werden.

Zum Beispiel möchten wir das Minimum zweier Zahlen berechnen. Mit dem ternären Operator sieht der Code so aus:

int a = 2;
int b = 3;
int min = a < b ?  a : b;

Oder Sie möchten je nach Bedingung einer Variablen unterschiedliche Werte zuweisen. Wie lässt sich das umsetzen?

Variante eins — den Operator if-else verwenden:

int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;

Variante zwei — den ternären Operator verwenden, also die Kurzschreibweise von if-else:

int age = 25;
int money = age > 30 ? 100 : 50;

Was sollte man also verwenden: den Operator if-else oder den ternären Operator? In puncto Ausführungsgeschwindigkeit gibt es keinen großen Unterschied. Es ist eher eine Frage der Lesbarkeit. Und das ist sehr wichtig: Code soll nicht nur korrekt funktionieren, sondern sich auch leicht von anderen Programmierern lesen lassen.

Ein einfaches Kriterium kann sein: Wenn der Code in eine Zeile passt — verwenden Sie den ternären Operator; passt er nicht in eine Zeile — verwenden Sie besser if-else.

3. Feinheiten in der Anwendung

Werttypen

Wichtig: Beide Zweige des ternären Operators (<Wert_wenn_wahr> und <Wert_wenn_falsch>) sollten vom gleichen Typ sein oder kompatibel (z. B. beide String oder beide int).

Funktioniert:

int a = 10, b = 20;
int max = (a > b) ? a : b; // beide Zweige — int

Kompilierfehler:

int a = 10, b = 20;
// String und int sind nicht kompatibel
String result = (a > b) ? "größer" : 0; // Kompilierfehler: int kann nicht einer Variablen vom Typ String zugewiesen werden

Korrekte Variante:

int a = 10, b = 20;
String result = (a > b) ? "größer" : "kleiner oder gleich";

Beispiel: Arbeit mit Zahlen

Berechnen wir den absoluten Wert mithilfe des ternären Operators:

int number = -5;
int abs = (number >= 0) ? number : -number;
System.out.println(abs); // 5

4. Einbettung des ternären Operators in eine Anwendung

Schreiben wir eine kleine Dialoganwendung: Neben der Begrüßung sagt das Programm dem Benutzer, wie alt er im nächsten Jahr sein wird, und gibt an, ob er volljährig sein wird.

System.out.print("Geben Sie Ihren Namen ein: ");
String name = console.nextLine();

System.out.print("Geben Sie Ihr Alter ein: ");
int age = console.nextInt();

int nextYear = age + 1;
String status = (nextYear >= 18) ? "volljährig" : "minderjährig";

System.out.println("Hallo, " + name + "! Im nächsten Jahr sind Sie " + nextYear + " Jahre alt. Sie werden " + status + " sein.");

Details erläutert:

Die Variable status wird mithilfe des ternären Operators berechnet: Wenn das Alter im nächsten Jahr mindestens 18 ist, ist der Benutzer volljährig (oder bleibt es).

5. Verschachtelte ternäre Operatoren — Vorsicht!

Man kann ternäre Operatoren ineinander verschachteln (in jedem Zweig kann noch ein weiterer Ternary stehen). Aber… davon bekommt man meist Kopfschmerzen, vor allem bei der Person, die den Code nach Ihnen liest (selbst wenn das Sie in 2 Tagen sind).

Beispiel: Alterskategorie bestimmen

String category = (age < 7) ? "Vorschulkind" :
                  (age < 18) ? "Schüler" :
                  (age < 65) ? "Erwachsener" : "Rentner";

Entscheidungstabelle:

Alter Bedingung Ergebnis
< 7
age < 7
Vorschulkind
7–17
age < 18
Schüler
18–64
age < 65
Erwachsener
65 und älter sonst Rentner

Solchen Code kann man noch lesen, aber wenn die Logik komplexer wird — verwenden Sie besser if-else if-else.

6. Lifehack: der ternäre Operator und der Typ boolean

Manchmal möchte man einen Ausdruck dieser Art schreiben:

boolean adult = (age >= 18) ? true : false;

Das ist jedoch überflüssig. Der Ausdruck (age >= 18) liefert bereits boolean. Daher kann man ihn verkürzen auf:

boolean adult = (age >= 18);
1
Aufgabe
JAVA 25 SELF, Level 3, Lektion 5
Gesperrt
Ermittlung des Siegers im Wettkampf 🏆
Ermittlung des Siegers im Wettkampf 🏆
1
Aufgabe
JAVA 25 SELF, Level 3, Lektion 5
Gesperrt
Prüfung der Bestellnummer auf Gerade/Ungerade 🛒
Prüfung der Bestellnummer auf Gerade/Ungerade 🛒
1
Aufgabe
JAVA 25 SELF, Level 3, Lektion 5
Gesperrt
Benutzerbegrüßung in der Anwendung 🌤️
Benutzerbegrüßung in der Anwendung 🌤️
1
Aufgabe
JAVA 25 SELF, Level 3, Lektion 5
Gesperrt
Ticketkategorie nach Alter 🎟️
Ticketkategorie nach Alter 🎟️
1
Umfrage/Quiz
Bedingter Operator, Level 3, Lektion 5
Nicht verfügbar
Bedingter Operator
Bedingter Operator: if else
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION