¿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?

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.