La seguente riga di codice ha due punti interrogativi:
final myStringList = prefs.getStringList('my_string_list_key') ?? [];
Qual è il significato?
Risposte:
L' ??
operatore del doppio punto interrogativo significa "se nullo". Prendi la seguente espressione, per esempio.
String a = b ?? 'hello';
Ciò significa a
uguale b
, ma se b
è nullo allora è a
uguale 'hello'
.
Un altro operatore correlato è ??=
. Per esempio:
b ??= 'hello';
Ciò significa che se b
è nullo, impostalo uguale a hello
. Altrimenti, non cambiarlo.
Riferimento
Termini
Le notizie sul rilascio di Dart 1.12 si riferiscono collettivamente ai seguenti come operatori null-aware :
??
- se operatore nullo??=
- assegnazione null-awarex?.p
- accesso null-awarex?.m()
- invocazione del metodo null-aware?
è già in uso da parte dell'operatore ternario: String a = b == true ? 'x' : 'y';
. Che l'operatore if-null risulta essere solo una scorciatoia per un controllo nullo ternario come String a = a == null ? 'hello : a;
.
?
viene utilizzato per l'operatore ternario allo stesso modo in PHP, e ci sono scorciatoie come invece di $a = $b === true ? $b : 'y'
poter digitare $a = $b === true ?: 'y'
o invece di $a = $b === true ? 'x' : $b
-$a = $b === true ?? 'x'
Dart offre alcuni utili operatori per gestire valori che potrebbero essere nulli. Uno è l'operatore di assegnazione ?? =, che assegna un valore a una variabile solo se quella variabile è attualmente nulla:
int a; // The initial value of a is null.
a ??= 3;
print(a); // <-- Prints 3.
a ??= 5;
print(a); // <-- Still prints 3.
Un altro operatore null-aware è ?? , che restituisce l'espressione alla sua sinistra a meno che il valore di quell'espressione non sia nullo, nel qual caso valuta e restituisce l'espressione alla sua destra:
print(1 ?? 3); // <-- Prints 1.
print(null ?? 12); // <-- Prints 12.