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 aigual b, mas se bfor nulo, então aigual 'hello'.
Outro operador relacionado é ??=. Por exemplo:
b ??= 'hello';
Isso significa que se bfor 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.