A seguinte linha de código tem dois pontos de interrogação:
final myStringList = prefs.getStringList('my_string_list_key') ?? [];
Qual é o significado?
O ??
operador de ponto de interrogação duplo significa "se nulo". Veja a seguinte expressão, por exemplo.
String a = b ?? 'hello';
Isso significa a
igual b
, mas se b
for nulo, então a
igual 'hello'
.
Outro operador relacionado é ??=
. Por exemplo:
b ??= 'hello';
Isso significa que se b
for nulo, defina-o igual a hello
. Caso contrário, não mude.
Referência
Termos
As notícias do lançamento do Dart 1.12 se referem coletivamente aos seguintes como operadores nulos :
??
- operador se nulo??=
- atribuição nulox?.p
- acesso nulox?.m()
- invocação de método com reconhecimento de nulo
?
já está a ser utilizado pelo operador ternário:String a = b == true ? 'x' : 'y';
. Que o operador if-null acaba sendo apenas uma abreviação para uma verificação nula ternária comoString a = a == null ? 'hello : a;
.?
é usado para operador ternário da mesma forma no PHP, e existem atalhos como em vez de$a = $b === true ? $b : 'y'
você pode digitar$a = $b === true ?: 'y'
ou em vez de$a = $b === true ? 'x' : $b
-$a = $b === true ?? 'x'
O Dart oferece alguns operadores úteis para lidar com valores que podem ser nulos. Um é o operador de atribuição ?? =, que atribui um valor a uma variável apenas se essa variável for atualmente nula:
int a; // The initial value of a is null. a ??= 3; print(a); // <-- Prints 3. a ??= 5; print(a); // <-- Still prints 3.
Outro operador nulo é ?? , que retorna a expressão à sua esquerda, a menos que o valor dessa expressão seja nulo, caso em que avalia e retorna a expressão à sua direita:
print(1 ?? 3); // <-- Prints 1. print(null ?? 12); // <-- Prints 12.
fonte