Ab Dart 1.12 sind nullbewusste Operatoren für diese Art von Situation verfügbar:
bool isConnected(a, b) {
bool outConn = outgoing[a]?.contains(b) ?? false;
bool inConn = incoming[a]?.contains(b) ?? false;
return outConn || inConn;
}
Der ?.
Operator schließt auf Null kurz, wenn die linke Seite Null ist, und der ??
Operator gibt die linke Seite zurück, wenn sie nicht Null ist, und die rechte Seite ansonsten.
Die Aussage
outgoing[a]?.contains(b)
wird also entweder bewerten, null
ob es outgoing[a]
ist null
, oder das boolesche Ergebnis, contains(b)
wenn es nicht ist.
Das bedeutet, dass die resultierende Aussage eine der folgenden ist:
bool outConn = null ?? false;
bool outConn = false ?? false;
bool outConn = true ?? false;
Gleiches gilt für den inConn
Booleschen Wert, der beides bedeutet inConn
und outConn
garantiert nicht null ist, sodass wir das Ergebnis ||
der beiden zurückgeben können.
outgoing[a]?.contains(b)
ist gefährlich, zumindest bei der Groovy-Semantik, denn wenn dies der Falloutgoing
istnull
, wird der gesamte Ausdruck ausgewertetnull
. Sie könnten also tatsächlich so etwas bekommenreturn (null || true)
, was im aktivierten Modus ausgelöst wird.??
) in meine aktualisierte Antwort aufgenommen, um dieses Problem zu berücksichtigen.object?.field ?? true
. Wo wahr kann alles sein, was Sie wollen.Es gibt jetzt 4 nullbewusste Operatoren
?? Gibt eine Standardeinstellung an, wenn der Betreff null ist
return subject ?? "defaultIfNull";
?? = setzt den Betreff nur dann auf einen Standardwert, wenn der Betreff null ist
Das ist ähnlich wie ?? Setzt die Betreffvariable jedoch auf einen Standardwert, wenn sie null ist.
subject ??= "defaultIfNull";
?. Vermeiden Sie eine Ausnahme, wenn der Betreff beim Zugriff auf die Eigenschaft des Betreffs null ist
object?.x
gibt null zurück, wenn das Objekt null ist,object.x
würde eine Ausnahme verursachen, wenn das Objekt null wäre...? Vermeiden Sie aus einer Spread-Sammlung ein Nullelement in der endgültigen Liste, wenn die Betreffliste null ist
das Ergebnis der folgenden
[ ...[1, 2], null, ]
ist
[1, 2, null]
Um den Nullwert zu vermeiden, verwenden Sie ...?
var resultingList = [ ...[1, 2], ...?subjectList, ];
quelle
a
die void-Methode hatmethod()
, führt die folgende Syntaxa?.method();
die Methode nur aus, wenn siea
nicht null ist.if(a!=null){XYZ();}
Folgendes posten, da ich hier gelandet bin, indem ich den Titel gesucht habe.
Gemäß https://github.com/dart-lang/sdk/issues/66 scheint die Antwort auf "Was ist die Dart-Nullprüfungssprache oder die beste Vorgehensweise?" ist:
Im allgemeinen Fall gibt es keine Nullprüfungssprache oder Best Practice. Wenn nullbewusste Operatoren nicht zu Ihrem Fall passen, verwenden Sie einen direkten Vergleich wie in
if (object == null)
oderif (object != null)
.quelle
bool ok<T>(T obj) => obj != null; bool nul<T>(T obj) => obj == null;
quelle