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 auguale b, ma se bè nullo allora è auguale '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.