Dart 1.12'den itibaren, bu tür durumlar için boşa duyarlı operatörler mevcuttur:
bool isConnected(a, b) {
bool outConn = outgoing[a]?.contains(b) ?? false;
bool inConn = incoming[a]?.contains(b) ?? false;
return outConn || inConn;
}
?.Sol taraftaki boş olduğunu ve eğer null operatör kısa devre ??o boş değildir ve sağ taraf aksi takdirde operatör sol tarafını döner.
İfade
outgoing[a]?.contains(b)
böylece birine değerlendirecek nulleğer outgoing[a]olduğunu null, ya da boole sonucu contains(b)Değilse.
Bu, ortaya çıkan ifadenin aşağıdakilerden biri olacağı anlamına gelir:
bool outConn = null ?? false;
bool outConn = false ?? false;
bool outConn = true ?? false;
Aynısı inConnboole için de geçerlidir , yani ikisinin de boş olmaması garanti edilir inConnve ikisinin outConnsonucunu döndürmemize izin verir ||.
outgoing[a]?.contains(b)tehlikelidir, en azından Groovy anlambilimiyle, çünkü olduğu zamanoutgoing,nulltüm ifade değerlendirilirnull. Böylece, aslındareturn (null || true)kontrol moduna geçecek gibi bir şey elde edebilirsiniz .