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でない場合、左側を返し、右側。
声明
outgoing[a]?.contains(b)
したがって、がであるかnullどうか 、またはそうでない場合のブール結果のいずれかに評価されます。outgoing[a]nullcontains(b)
つまり、結果のステートメントは次のいずれかになります。
bool outConn = null ?? false;
bool outConn = false ?? false;
bool outConn = true ?? false;
同じことが適用されるにinConn両方を意味ブール、inConnとoutConn私たちは結果を返すためにできるように、非nullであることが保証されている||2をINGのを。
outgoing[a]?.contains(b)少なくともGroovyセマンティクスでは、書き込みは危険です。outgoingがnull、の場合、式全体がに評価されるためnullです。したがって、実際には、のようなものが得られる可能性がありreturn (null || true)ます。これは、チェックモードでスローされます。