Die folgende Codezeile enthält zwei Fragezeichen:
final myStringList = prefs.getStringList('my_string_list_key') ?? [];
Was ist die Bedeutung?
Der ??
doppelte Fragezeichenoperator bedeutet "wenn null". Nehmen Sie zum Beispiel den folgenden Ausdruck.
String a = b ?? 'hello';
Dies bedeutet a
gleich b
, aber wenn b
null ist, dann ist a
gleich 'hello'
.
Ein weiterer verwandter Betreiber ist ??=
. Zum Beispiel:
b ??= 'hello';
Dies bedeutet, wenn b
null ist, setzen Sie es gleich hello
. Ansonsten ändere es nicht.
Referenz
Bedingungen
In den Dart 1.12-Veröffentlichungsnachrichten wurde Folgendes als nullbewusste Operatoren bezeichnet :
??
- wenn Nulloperator??=
- nullbewusste Zuordnungx?.p
- nullbewusster Zugriffx?.m()
- Null-fähiger Methodenaufruf
?
es bereits vom ternären Operator verwendet wird :String a = b == true ? 'x' : 'y';
. Was sich herausstellt, dass der if-null-Operator nur eine Abkürzung für eine ternäre Nullprüfung istString a = a == null ? 'hello : a;
.?
wird für ternäre Operatoren auf die gleiche Weise in PHP verwendet, und es gibt Verknüpfungen wie anstelle von können$a = $b === true ? $b : 'y'
Sie$a = $b === true ?: 'y'
$a = $b === true ? 'x' : $b
$a = $b === true ?? 'x'