web-dev-qa-db-fra.com

Dart null / false / empty verification: comment écrire cela plus court?

Ceci est mon code pour vrai sur tout sauf chaîne vide, null et false:

if (routeinfo["no_route"] == "" || routeinfo["no_route"] == null || routeinfo["no_route"] == false) {
    // do sth ...
}

Voici mon code pour vrai sur tout sauf chaîne vide, null, false ou zero:

if (routeinfo["no_route"] == "" || routeinfo["no_route"] == null || routeinfo["no_route"] == false || routeinfo["no_route"] == 0) {
    // do sth...
}

Comment puis-je écrire cela plus court dans Dart? Ou n'est-ce pas possible?

20
Blackbam

Vous pourriez faire

if (["", null, false, 0].contains(routeinfo["no_route"])) {
  // do sth
}
12
Harry Terkelsen

Si votre exigence était simplement vide ou nulle (comme la mienne quand j'ai vu ce titre dans un résultat de recherche), vous pouvez utiliser l'opérateur de navigation sécurisée de Dart pour le rendre un peu plus concis:

if (routeinfo["no_route"]?.isEmpty ?? true) {
  // 
}

  • isEmpty recherche une chaîne vide, mais si routeinfo est null vous ne pouvez pas appeler isEmpty sur null, nous vérifions donc null avec
  • ?.opérateur de navigation sécurisé qui appellera uniquement isEmpty lorsque l'objet n'est pas nul et produira null sinon. Nous avons donc juste besoin de vérifier null avec
  • ??opérateur de coalescence nul
29
Jannie Theunissen

J'écrirais une fonction d'aide au lieu de tout faire en ligne.

bool isNullEmptyOrFalse(Object o) =>
  o == null || false == o || "" == o;

bool isNullEmptyFalseOrZero(Object o) =>
  o == null || false == o || 0 == o || "" == o;

Cela évite la recherche répétée (comme l'opération contains), mais elle est beaucoup plus lisible. Il ne crée pas non plus de nouveau littéral List pour chaque vérification (rendre la liste const pourrait résoudre ce problème).

if (isNullEmptyOrFalse(routeinfo["no_route"])) { ... }

Lorsque vous avez du mal à créer quelque chose de court et de lisible, créer une fonction d'aide bien nommée est généralement la meilleure solution.

10
lrn