Unterschied zwischen !! Und ? Betreiber in Kotlin
- das Konzept der Nullsicherheit
-
Null-Sicherheitsoperator
?
in Kotlin -
Nicht-Null-Behauptung
!!
Betreiber in Kotlin
In Kotlin ist der Behauptungsoperator !!
und der Safe-Call-Operator ?
Arbeit mit null Sicherheit.
Dieser Artikel stellt das Konzept der Nullsicherheit vor. Wir werden auch durchgehen, wie !!
Und ?
in Kotlin hilft mit null Sicherheit.
das Konzept der Nullsicherheit
Das Typsystem von Kotlin zielt darauf ab, das Nullreferenzproblem zu beseitigen. Das Problem besteht darin, dass in vielen Programmiersprachen mit dem Nullkonzept der Zugriff auf ein Nullreferenzelement zu einer Ausnahme führt.
In Kotlin wird diese Ausnahme als NullPointerException
oder kurz NPE bezeichnet. Das Typsystem in Kotlin zielt darauf ab, das Nullreferenzproblem durch Nullsicherheit zu überwinden.
Das System unterscheidet Referenzen, die Nullreferenzen enthalten können und nicht. Beispielsweise kann eine Standard-String-Variable nicht null
enthalten, aber String?
dürfen.
Hier sind die Beispiele, um dasselbe zu demonstrieren.
Das erste Beispiel verwendet eine Standardvariable, was eine Nicht-Null-Referenz bedeutet.
fun main() {
var s: String = "Hello" // Regular initialization means a non-null value
println(s)
}
Ausgang:
Wenn wir versuchen, null
mit einer Standardvariablen zu verwenden, wird ein Fehler ausgegeben.
fun main() {
var s: String = null
println(s)
}
Ausgang:
Das zweite Beispiel verwendet String?
, das null
sein kann.
fun main() {
var s: String? = null // we can set this to null
print(s)
}
Ausgang:
Wie wir sehen können, ist nur String?
kann null
enthalten. Wenn es sich also um eine standardmäßige Variableninitialisierung handelt, kann das Typsystem von Kotlin verstehen, dass es keinen null
-Wert haben wird.
So können Sie schnell eine solche Referenz aufrufen, ohne sich Gedanken über NPE machen zu müssen.
Aber was ist mit den Variablen, die null
enthalten können? Wir können auf diese Variablen nicht direkt zugreifen, da sie nicht NPE-sicher sind.
fun main() {
var s: String? = null // we can set this to null
print(s)
val l = s.length // This throws error as 's' can be null
}
Ausgang:
Aber wie greifen Sie dann auf solche Variablen zu? Und die Antwort ist durch ?
Und !!
Betreiber.
Null-Sicherheitsoperator ?
in Kotlin
Eine Möglichkeit, auf Null-Referenzmitglieder zuzugreifen, ist mit Hilfe von ?
. Die Verwendung dieses Operators gibt den Wert zurück, wenn die Variable nicht null ist, andernfalls null
.
Betrachten wir die folgenden Beispiele, um dies zu verstehen.
Wir verwenden für das erste Beispiel einen Nicht-Null-Wert und erhalten seine Länge.
Beispiel 1:
fun main() {
var s: String? = "Hello"
println(s)
val l = s?.length
print(l)
}
Ausgang:
Nun initialisieren wir die Variable als null
.
Beispiel 2:
fun main() {
var s: String? = null
println(s)
val l = s?.length
print(l)
}
Ausgang:
Der sichere Operator ?
ist auch beim Erstellen von Ketten hilfreich.
Stellen Sie sich zum Beispiel einen Mitarbeiter eines Unternehmens vor. Er könnte einen Teamleiter haben, der unter einem Manager arbeitet.
Wir können benutzen ?
um eine Kette zu erstellen und wie folgt auf den Namen von Davids Manager zuzugreifen:
employeename?.teamleader?.manager?.name
Wir können die obige Syntax lesen als:
- Wenn der
employeename
nicht null ist, geben Sie die Abteilung zurück. - Wenn die
Abteilung
nicht null ist, geben Sie den Manager zurück. - Wenn der
manager
nicht null ist, geben Sie den Namen zurück.
Wenn eine der Variablen null
ist, gibt die Syntax null
zurück.
Nicht-Null-Behauptung !!
Betreiber in Kotlin
Eine weitere Option für den Zugriff auf Null-Referenzmitglieder ist die Verwendung des !!
Operator. Es ist für NPE-Liebhaber.
Wenn Sie also möchten, dass die Aktion des Zugriffs auf Nicht-Null-Referenzelemente entweder den Wert angibt, falls vorhanden, oder NPE auslöst, können Sie diesen Operator in Kotlin verwenden.
Betrachten wir die gleichen zwei Beispiele, die wir für das sichere ?
Operator, um zu verstehen, wie die Nicht-Null-Assertion !!
Betreiber funktioniert.
Beispiel 1:
fun main() {
var s: String? = "Hello"
println(s)
val l = s!!.length
print(l)
}
Ausgang:
Beispiel 2:
fun main() {
var s: String? = null
println(s)
val l = s!!.length
print(l)
}
Ausgang:
Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.
LinkedIn