Unterschied zwischen !! Und ? Betreiber in Kotlin

Kailash Vaviya 15 Februar 2024
  1. das Konzept der Nullsicherheit
  2. Null-Sicherheitsoperator ? in Kotlin
  3. Nicht-Null-Behauptung !! Betreiber in Kotlin
Unterschied zwischen !! Und ? 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:

Reguläre Initialisierungsvariable

Wenn wir versuchen, null mit einer Standardvariablen zu verwenden, wird ein Fehler ausgegeben.

fun main() {
    var s: String = null
    println(s)
}

Ausgang:

Reguläre Initialisierungsvariable mit Nullwert

Das zweite Beispiel verwendet String?, das null sein kann.

fun main() {
    var s: String? = null // we can set this to null
    print(s)
}

Ausgang:

Schnur? Variable mit Nullwert

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:

Zugriffszeichenfolge? Variable löst Fehler aus

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:

Zugriffszeichenfolge? Variable mit Nicht-Null-Wert

Nun initialisieren wir die Variable als null.

Beispiel 2:

fun main() {
    var s: String? = null
    println(s)

    val l = s?.length
    print(l)
}

Ausgang:

Zugriffszeichenfolge? Variable mit Nullwert

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:

Zugriffszeichenfolge? Variable mit Nicht-Null-Assertion 1

Beispiel 2:

fun main() {
    var s: String? = null
    println(s)

    val l = s!!.length
    print(l)
}

Ausgang:

Zugriffszeichenfolge? Variable mit Nicht-Null-Assertion 2

Kailash Vaviya avatar Kailash Vaviya avatar

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

Verwandter Artikel - Kotlin Operator