CodeGym /Kurse /C# SELF /Der ternäre Operator in C#: kompakte Bedingungen und Beso...

Der ternäre Operator in C#: kompakte Bedingungen und Besonderheiten

C# SELF
Level 3 , Lektion 5
Verfügbar

1. Ausdrücke vs Anweisungen

In C# gibt's zwei Kategorien: Anweisungen (Statement) und Ausdrücke (Expression). Über eine Anweisung sagt man meistens, dass sie ausgeführt wird, über einen Ausdruck – dass er ausgewertet wird. Aber das ist nicht das Wichtigste.

Das Hauptunterscheidungsmerkmal: Ein Ausdruck hat ein Ergebnis. Dieses Ergebnis hat einen Typ und kann einer Variable zugewiesen oder in einem anderen Ausdruck verwendet werden.

Beispiele:

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

Was bringt uns das?

Viele Anweisungen sind eigentlich Ausdrücke (sie liefern ein Ergebnis). Zum Beispiel funktioniert folgender Code:
int x, y, z;
x = y = z = 1; 	// x = (y = (z = 1));
Du kannst das Ergebnis eines Ausdrucks ignorieren, wenn du es nicht brauchst:
Console.ReadLine();	// wir ignorieren das Eingabe-Ergebnis

Das ist praktisch, wenn der Ausdruck neben dem Ergebnis noch was Nützliches macht (zum Beispiel etwas ausgibt oder Eingaben liest).

2. Der ternäre Operator

In C# gibt's einen speziellen ternären (dreifachen) Operator. Er ist wie eine Kurzschreibweise für if–else:


Bedingung ? Ausdruck1 : Ausdruck2;
Syntax des ternären Operators

Wenn Bedingung wahr ist, wird Ausdruck1 ausgewertet, sonst Ausdruck2. Nach der Bedingung kommt ?, die beiden Ausdrücke werden mit : getrennt.

Der Hauptunterschied zu if-else: Der ternäre Operator ist ein Ausdruck, sein Ergebnis kannst du einer Variable zuweisen oder in anderen Ausdrücken verwenden.

Zum Beispiel: Minimum von zwei Zahlen berechnen:

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

Oder einer Variable je nach Bedingung verschiedene Werte zuweisen:


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

Das Gleiche mit dem ternären Operator:


int age = 25;
int money = age > 30 ? 100 : 50;
Ternärer Operator – kompakte Schreibweise

Was ist besser: if-else oder ternärer Operator? Von der Geschwindigkeit her gibt's keinen Unterschied, aber der ternäre Operator ist nice für kurze Bedingungen. Wenn der Code nicht in eine Zeile passt – lieber if-else für bessere Lesbarkeit nehmen.

3. Besonderheiten

Typen der Werte
Beide Zweige des ternären Operators (<wert_wenn_wahr> und <wert_wenn_falsch>) müssen 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

Compiler-Fehler:

int a = 10, b = 20;
// string und int sind nicht kompatibel
string result = (a > b) ? "mehr" : 0; // Compiler-Fehler

Richtige Variante:

int a = 10, b = 20;
string result = (a > b) ? "mehr" : "weniger oder gleich";

Beispiel: Arbeit mit Zahlen

int number = -5;
int abs = (number >= 0) ? number : -number;
Console.WriteLine(abs); // 5

4. Ternären Operator in die Anwendung einbauen

Lass uns eine kleine Dialog-Anwendung schreiben: Neben der Begrüßung sagt das Programm dem User, wie alt er nächstes Jahr sein wird und ob er dann volljährig ist.

Console.Write("Gib deinen Namen ein: ");
string name = Console.ReadLine();

Console.Write("Gib dein Alter ein: ");
string ageText = Console.ReadLine();
int age = int.Parse(ageText);

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

Console.WriteLine($"Hi, {name}! Nächstes Jahr bist du {nextYear}. Du wirst {status} sein.");

Details erklärt:

  • Die Variable status wird mit dem ternären Operator berechnet: Wenn das Alter im nächsten Jahr mindestens 18 ist, ist der User volljährig (oder bleibt es).
  • Den ternären Operator kannst du easy direkt in Strings einbauen (zum Beispiel mit String-Interpolation $"").

5. Verschachtelte ternäre Operatoren – Vorsicht!

Du kannst ternäre Operatoren ineinander verschachteln (in jedem Zweig kann noch ein ternärer stehen). Aber… das gibt meistens Kopfweh, vor allem für den, der den Code nach dir lesen muss (auch wenn du das selbst bist in 2 Tagen).

Beispiel: Kategorie nach Alter 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 mehr sonst rentner

So ein Code ist noch lesbar, aber wenn die Logik komplizierter wird – lieber if-else if-else nehmen.

6. Lifehack: ternärer Operator und Typ bool

Manchmal sieht man sowas:

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

Aber das ist unnötig. Der Ausdruck (age >= 18) gibt schon bool zurück. Du kannst also einfach:

bool adult = (age >= 18);
1
Umfrage/Quiz
Bedingte Anweisung, Level 3, Lektion 5
Nicht verfügbar
Bedingte Anweisung
Bedingte Anweisung
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION