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) .