Was sind die ?? doppelte Fragezeichen in Dart?

86

Die folgende Codezeile enthält zwei Fragezeichen:

final myStringList = prefs.getStringList('my_string_list_key') ?? [];

Was ist die Bedeutung?

Suragch
quelle

Antworten:

173

Der ??doppelte Fragezeichenoperator bedeutet "wenn null". Nehmen Sie zum Beispiel den folgenden Ausdruck.

String a = b ?? 'hello';

Dies bedeutet agleich b, aber wenn bnull ist, dann ist agleich 'hello'.

Ein weiterer verwandter Betreiber ist ??=. Zum Beispiel:

b ??= 'hello';

Dies bedeutet, wenn bnull 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 Zuordnung
  • x?.p - nullbewusster Zugriff
  • x?.m() - Null-fähiger Methodenaufruf
Suragch
quelle
3
Interessant warum es ist ?? und nicht?:, es ist ziemlich irreführend für jemanden, der aus PHP kommt, als ?? in PHP bedeutet völlig entgegengesetzt.
Vedmant
1
@Vedmant wahrscheinlich, weil ?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 ist String a = a == null ? 'hello : a;.
Bruno Finger
1
@BrunoFinger ?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'
eingeben
|| wäre imo klarer gewesen
Ced