La siguiente línea de código tiene dos signos de interrogación:
final myStringList = prefs.getStringList('my_string_list_key') ?? [];
¿Cuál es el significado?
El ??
operador de doble signo de interrogación significa "si es nulo". Tome la siguiente expresión, por ejemplo.
String a = b ?? 'hello';
Esto significa a
igual b
, pero si b
es nulo, entonces a
es igual 'hello'
.
Otro operador relacionado es ??=
. Por ejemplo:
b ??= 'hello';
Esto significa que si b
es nulo, configúrelo igual a hello
. De lo contrario, no lo cambie.
Referencia
Condiciones
Las noticias del lanzamiento de Dart 1.12 se referían colectivamente a los siguientes operadores con reconocimiento de nulos :
??
- si es operador nulo??=
- asignación con reconocimiento de nulosx?.p
- acceso nulox?.m()
- invocación de método nulo
?
ya está siendo utilizado por el operador ternario:String a = b == true ? 'x' : 'y';
. Lo que el operador if-null resulta ser solo una abreviatura de una verificación ternaria nula comoString a = a == null ? 'hello : a;
.?
se usa para el operador ternario de la misma manera en PHP, y hay atajos como en lugar de$a = $b === true ? $b : 'y'
que puede escribir$a = $b === true ?: 'y'
o en lugar de$a = $b === true ? 'x' : $b
-$a = $b === true ?? 'x'