我有以下形式的赋值和空值检查,以避免在我的地图中进行双重查找.
在Dart中有更好或更惯用的方法吗?
bool isConnected(a, b){
List list;
return (
((list = outgoing[a]) != null && list.contains(b)) ||
((list = incoming[a]) != null && list.contains(b))
);
}
Run Code Online (Sandbox Code Playgroud)
Pix*_*ant 78
从Dart 1.12开始,null-aware运算符可用于此类情况:
bool isConnected(a, b) {
bool outConn = outgoing[a]?.contains(b) ?? false;
bool inConn = incoming[a]?.contains(b) ?? false;
return outConn || inConn;
}
Run Code Online (Sandbox Code Playgroud)
该?.运营商短路为空,如果左侧为空,而??如果不是空操作符返回左边和右边,否则.
该声明
outgoing[a]?.contains(b)
Run Code Online (Sandbox Code Playgroud)
因此将评估为nullif ,或者是否 outgoing[a]为null布尔结果contains(b).
这意味着结果语句将是以下之一:
bool outConn = null ?? false; // false
bool outConn = false ?? false; // false
bool outConn = true ?? false; // true
Run Code Online (Sandbox Code Playgroud)
这同样适用于inConn布尔值,这意味着双方inConn并outConn保证是无空,让我们返回的结果||荷兰国际集团两个.
sta*_*anm 12
发布以下内容,因为我通过搜索标题结束了这里.
根据https://github.com/dart-lang/sdk/issues/66,似乎答案为"什么是Dart null检查成语或最佳实践?" 是:
在一般情况下,没有空检查习惯用法或最佳做法.如果null-aware运算符不适合您的情况,请使用if (object == null)或中的直接比较if (object != null).
现在有4个空感知运算符
return subject ?? "defaultIfNull";
Run Code Online (Sandbox Code Playgroud)
这类似于?? 但是将主题变量设置为默认值(如果为null)。
subject ??= "defaultIfNull";
Run Code Online (Sandbox Code Playgroud)
object?.x如果object为null将返回null,如果object为null object.x将导致异常
以下结果
[
...[1, 2],
null,
]
Run Code Online (Sandbox Code Playgroud)
是 [1, 2, null]
避免使用空值...?
var resultingList = [
...[1, 2],
...?subjectList,
];
Run Code Online (Sandbox Code Playgroud)