Dart null / false / empty checking:如何写这个更短?

问题描述 投票:10回答:3

这是我的代码,对于除了空字符串,null和false之外的所有内容都是true:

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

这是我的代码,对于除了空字符串,null,false或零之外的所有内容都是true:

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

我怎么能在Dart写这个更短的?还是不可能?

if-statement dart conditional
3个回答
9
投票

你可以做到

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

21
投票

如果您的需求只是空或null(就像我在搜索结果中看到此标题时那样),您可以使用Dart的安全导航操作符使其更简洁:

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

哪里

  • isEmpty检查一个空字符串,但如果routeinfo是null你不能在null上调用isEmpty,所以我们检查null
  • ?. safe navigation operator,当对象不为null时只调用isEmpty,否则生成null。所以我们只需要检查null
  • ?? null coalescing operator

8
投票

我会编写一个辅助函数而不是内联的所有东西。

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

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

这避免了重复查找(如contains操作),但它更具可读性。它也不会为每个检查创建一个新的List文字(使列表const可以修复它)。

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

在努力做一些简短易读的事情时,制作一个名字很好的辅助函数通常是最好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.