vasos tutorial google español container dart

tutorial - dart vs javascript



¿Qué es el idioma de comprobación nula de Dart o las mejores prácticas? (2)

A partir de Dart 1.12, hay operadores con capacidad nula disponibles para este tipo de situación:

bool isConnected(a, b) { bool outConn = outgoing[a]?.contains(b) ?? false; bool inConn = incoming[a]?.contains(b) ?? false; return outConn || inConn; }

El ?. el operador cortocircuita a nulo si el lado izquierdo es nulo, y el ?? el operador devuelve el lado izquierdo si no es nulo, y el lado derecho de lo contrario.

La declaración

outgoing[a]?.contains(b)

por lo tanto, se evaluará como null si outgoing[a] es null , o el resultado booleano de contains(b) si no lo es.

Eso significa que la declaración resultante será una de las siguientes:

bool outConn = null ?? false; // false bool outConn = false ?? false; // false bool outConn = true ?? false; // true

Lo mismo se aplica al booleano de inConn , lo que significa que se garantiza que tanto inConn como outConn no son nulos, lo que nos permite devolver el resultado de || los dos.

Tengo la siguiente forma de asignación y controles nulos para evitar búsquedas dobles en mis mapas.
¿Hay alguna forma mejor o más idiomática de hacer esto en Dart?

bool isConnected(a, b){ List list; return ( ((list = outgoing[a]) != null && list.contains(b)) || ((list = incoming[a]) != null && list.contains(b)) ); }


Publicando lo siguiente, ya que terminé aquí buscando el título.

Según https://github.com/dart-lang/sdk/issues/66 , parece que la respuesta a "¿Qué es el idioma de comprobación nula de Dart o la mejor práctica?" es:

No hay ningún idioma de comprobación nula o la mejor práctica en el caso general. Si los operadores conscientes de nulos no encajan en su caso, use la comparación directa como en if (object == null) o if (object != null) .