ダートのよう
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]
はnull
、またはcontains(b)
のブール結果である場合
声明
outgoing[a]?.contains(b)
は、このようにどちらかがnull
と評価されます。
bool outConn = null ?? false; // false
bool outConn = false ?? false; // false
bool outConn = true ?? false; // true
同じは私たちが返すようにできるように、inConn
とoutConn
の両方が非nullであることが保証されることを意味inConn
ブール、に適用されます。結果の文は、次のいずれかになります意味
その結果は||
となります。
'outgoing [a] ?. containsを書くことは、少なくともGroovyのセマンティクスでは危険です。なぜなら、' outgoing'が 'null'のとき、式全体が' null'と評価されるからです。したがって、実際には 'return(null || true)'のようなものを取得して、チェックモードで投げてしまうかもしれません。 – Ladicek
未解決の問題のリンクをありがとう。 – z5h
@Ladicekそれを指摘してくれてありがとう。私はその問題を説明する私の更新された答えにnull合体演算子( '?')を組み込みました。 –