Die hier behandelten Bedingungsoperatoren sind keine bedingten Anweisungen wie if-else. Gemeint sind der Ternäroperator und der Null-Coalescing-Operator.
Zwei Arten von Bedingungsoperatoren
Dart stellt zwei kompakte Bedingungsoperatoren zur Verfügung, die lange if-else-Verzweigungen ersetzen. Bedingungsprüfung, Zuweisung und Rückgabe lassen sich damit in einer einzigen Zeile schreiben.
- Ternärer Bedingungsoperator:
condition ? expr1 : expr2 - Null-Coalescing-Operator:
expr1 ?? expr2
Der Ternäroperator condition ? expr1 : expr2
Syntax
Boolesche Bedingung ? Ausdruck bei wahr : Ausdruck bei falsch
Liefert condition das Ergebnis true, wird expr1 zurückgegeben; bei false wird stattdessen expr2 ausgegeben.
Diese condition liefert einen booleschen Wert, anhand dieses Boolschen Werts wird einer von zwei Werte zur Zuweisung oder Rückgabe ausgewählt.
Beispiel:
void main() {
bool isRain = true;
// Zuweisung per Ternärausdruck
var result = isRain ? 'Es regnet' : 'Es regnet nicht';
print(result); // Es regnet
isRain = false;
result = isRain ? 'Es regnet' : 'Es regnet nicht';
print(result); // Es regnet nicht
}Code-Sprache: Dart (dart)
Ausgabe der Ausführung
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Es regnet
Es regnet nichtCode-Sprache: CSS (css)
Wenn du bereits if-else kennst, kannst du den Code auch so schreiben:
void main() {
bool isRain = true;
String result;
if (isRain) {
result = 'Es regnet';
} else {
result = 'Es regnet nicht';
}
print(result);//Es regnet
}Code-Sprache: Dart (dart)
Null-Coalescing-Operator
Prüft, ob eine Variable null ist und erlaubt die schnelle Zuweisung eines Standardwerts.
Syntax expr1 ?? expr2
Nullbarer Ausdruck ?? Standardwert
- Ist
expr1nicht null, wird direktexpr1zurückgegeben; - Ist
expr1gleichnull, wirdexpr2zurückgegeben
Offizielles Beispiel
void main() {
// Parameter ist ein nullbarer String String?
String playerName(String? name) => name ?? 'Guest';
print(playerName("Tom")); // Tom
print(playerName(null)); // Guest
}Code-Sprache: JavaScript (javascript)
Wir definieren die Funktion playerName für den Spielernamen mit einem nullbaren String-Parameter. Mit dem Operator ?? legen wir einen Standardwert fest: Wird als name null übergeben, wird standardmäßig Guest ausgegeben.
Zusatzinformation
Bei playerName handelt es sich um eine Pfeilfunktion, eine verkürzte Schreibweise für Funktionen. Wir lernen diese später kennen, sie ist vollständig äquivalent zum folgenden Code:
String playerName(String? name) {
return name ?? 'Guest';
}Code-Sprache: Dart (dart)
Vergleich äquivalenter Schreibweisen
Umsetzung mit Ternäroperator
String playerName(String? name) => name != null ? name : 'Guest';Code-Sprache: JavaScript (javascript)
Vollständige if-else-Anweisung
String playerName(String? name) {
if (name != null) {
return name;
} else {
return 'Guest';
}
}Code-Sprache: JavaScript (javascript)