Soll ich doppelt =
oder dreifach verwenden =
?
if(a === null) {
//do something
}
oder
if(a == null) {
//do something
}
Ähnliches gilt für "nicht gleich":
if(a !== null) {
//do something
}
oder
if(a != null) {
//do something
}
kotlin
kotlin-null-safety
pdeva
quelle
quelle
Antworten:
Beide Ansätze generieren denselben Bytecode, sodass Sie auswählen können, was Sie bevorzugen.
quelle
Eine strukturelle Gleichheit
a == b
wird übersetzt inIm Vergleich zu
null
wird daher die strukturelle Gleichheita == null
in eine referentielle Gleichheit übersetzta === null
.Laut den Dokumenten macht es keinen Sinn, Ihren Code zu optimieren. Sie können also Folgendes verwenden
a == null
unda != null
beachten : Wenn die Variable eine veränderbare Eigenschaft ist, können Sie sie nicht intelligent in den nicht nullbaren Typ innerhalb der
if
Anweisung umwandeln (weil Der Wert wurde möglicherweise von einem anderen Thread geändertlet
. Stattdessen müssen Sie den Operator für sichere Anrufe verwenden.Sicherer Anrufbetreiber
?.
Sie können es in Kombination mit dem Elvis-Operator verwenden.
Elvis-Operator
?:
(Ich vermute, weil das Verhörzeichen wie Elvis 'Haare aussieht)Und wenn Sie einen Codeblock ausführen möchten
Die beiden kombinieren
quelle
if
für Nullprüfungen?a?.let{} ?: run{}
ist nur in seltenen Fällen angebracht, sonst ist es nicht idiomatischnull
Überprüfungen, ich habe andere praktikable Optionen aufgelistet . Obwohl ich nicht sicher bin, obrun
es irgendeine Art von Leistungsstrafe gibt. Ich werde meine Antwort aktualisieren, um es klarer zu machen.a
ist einvar
, dann mit dera?.let{} ?: run{}
Garantie, dass es in derlet
für den gesamten Umfang richtig gebunden wird . Wenn aa
istval
, gibt es keinen Unterschied.val
, dann ist die Verwendung von let anders und es ist schlecht. Ich fand diesen Artikel sehr gut darin, ihn zu erklären - Kotlin: Verwenden Sie LET nicht nur für die Nullprüfung .Kotlin Umgang mit Null
Sicherer Zugriff
Funktionieren lassen
Vorzeitiger Ausstieg
Unveränderliche Schatten
Standardwert
Verwenden Sie val anstelle von var
val
ist schreibgeschützt,var
ist veränderlich. Es wird empfohlen, so viele schreibgeschützte Eigenschaften wie möglich zu verwenden. Sie sind threadsicher.Verwenden Sie lateinit
Manchmal können Sie keine unveränderlichen Eigenschaften verwenden. Dies geschieht beispielsweise unter Android, wenn eine Eigenschaft beim
onCreate()
Aufruf initialisiert wird . Für diese Situationen verfügt Kotlin über eine Sprachfunktion namenslateinit
.quelle
Ergänzung zu @Benito Bertoli,
Die Kombination ist eigentlich anders als wenn-sonst
Das Ergebnis ist:
Aber falls:
Das Ergebnis ist:
Wenn Sie zuerst elvis verwenden:
Das Ergebnis ist:
quelle
Schauen Sie sich nützliche Methoden an, es könnte nützlich sein:
Nachfolgend finden Sie ein mögliches Beispiel für die Verwendung dieser Funktionen:
quelle