¿Cuáles son los ?? signos de interrogación dobles en Dart?

86

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?

Suragch
fuente

Respuestas:

172

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 aigual b, pero si bes nulo, entonces aes igual 'hello'.

Otro operador relacionado es ??=. Por ejemplo:

b ??= 'hello';

Esto significa que si bes 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 nulos
  • x?.p - acceso nulo
  • x?.m() - invocación de método nulo
Suragch
fuente
3
Interesante por qué es ?? y no?:, es bastante engañoso para alguien que viene de PHP, como ?? en PHP significa completamente opuesto.
Vedmant
1
@Vedmant probablemente porque ?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 como String a = a == null ? 'hello : a;.
Bruno Finger
1
@BrunoFinger ?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'
Vedmant
|| habría sido más claro imo
Ced