这是我的代码,对于除了空字符串,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 (["", null, false, 0].contains(routeinfo["no_route"])) {
// do sth
}
如果您的需求只是空或null(就像我在搜索结果中看到此标题时那样),您可以使用Dart的安全导航操作符使其更简洁:
if (routeinfo["no_route"]?.isEmpty ?? true) {
//
}
哪里
isEmpty
检查一个空字符串,但如果routeinfo是null
你不能在null上调用isEmpty,所以我们检查null?.
safe navigation operator,当对象不为null时只调用isEmpty,否则生成null。所以我们只需要检查null??
null coalescing operator我会编写一个辅助函数而不是内联的所有东西。
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"])) { ... }
在努力做一些简短易读的事情时,制作一个名字很好的辅助函数通常是最好的解决方案。