我有以下形式的分配&;NULL判断,以避免在我的 map 中进行双重查找.
在DART中,有没有更好或更惯用的方法来实现这一点?
bool isConnected(a, b){
List list;
return (
((list = outgoing[a]) != null && list.contains(b)) ||
((list = incoming[a]) != null && list.contains(b))
);
}
我有以下形式的分配&;NULL判断,以避免在我的 map 中进行双重查找.
在DART中,有没有更好或更惯用的方法来实现这一点?
bool isConnected(a, b){
List list;
return (
((list = outgoing[a]) != null && list.contains(b)) ||
((list = incoming[a]) != null && list.contains(b))
);
}
从DART 1.12开始,支持NULL的操作符可用于此类型的情况:
bool isConnected(a, b) {
bool outConn = outgoing[a]?.contains(b) ?? false;
bool inConn = incoming[a]?.contains(b) ?? false;
return outConn || inConn;
}
如果左侧为NULL,则?.
运算符会短路为NULL,如果左侧不为NULL,则??
运算符会返回左侧,否则返回右侧.
该声明
outgoing[a]?.contains(b)
因此,如果outgoing[a]
为null
,则求值为null
,否则将求值为布尔结果contains(b)
.
这意味着生成的语句将是以下语句之一:
bool outConn = null ?? false; // false
bool outConn = false ?? false; // false
bool outConn = true ?? false; // true
同样的道理也适用于inConn
布尔值,这意味着保证inConn
和outConn
都是非空的,从而允许我们返回对这两个布尔值进行||
运算的结果.