A seguinte linha de código tem dois pontos de interrogação:
final myStringList = prefs.getStringList('my_string_list_key') ?? [];
Qual é o significado?
Respostas:
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 como String 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.