var und val in Kotlin: Was ist der Unterschied? Vollständige Analyse

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

var und val in Kotlin: Was ist der Unterschied? Vollständige Analyse

\n\n

Wenn Sie gerade erst mit Kotlin beginnen oder von anderen Sprachen (Java, Python, JavaScript) kommen, ist eine der ersten Fragen, die Sie stellen werden: Warum braucht man zwei Schlüsselwörter zur Deklaration von Variablen? In der Tat, warum die Sache verkomplizieren, wenn man mit einem auskommen könnte? Die Antwort liegt in der Philosophie der Sprache: Kotlin wurde entwickelt, um Code sicherer, verständlicher und vorhersagbarer zu machen. Und der Unterschied zwischen var und val ist keine Laune, sondern ein mächtiges Werkzeug zur Zustandsverwaltung.

\n\n

Lassen Sie uns anhand von Beispielen verstehen, wann man var und wann val verwendet und warum dies für Ihren Code wichtig ist.

\n\n

Was sind var und val? Grundlegende Definitionen

\n\n

Beginnen wir mit dem Einfachsten.

\n\n
    \n
  • var (vom engl. variable) — eine veränderliche Variable. Sie können ihr beliebig oft einen neuen Wert zuweisen.
  • \n
  • val (vom engl. value) — eine unveränderliche Referenz (read-only). Nach der Initialisierung können Sie ihren Wert nicht mehr ändern. Es ist das Analogon zu final in Java oder const in JavaScript (mit Einschränkungen).
  • \n
\n\n

Hier ist das einfachste Beispiel:

\n\n
fun main() {\n    var x = 10\n    x = 20 // OK: var kann geändert werden\n\n    val y = 30\n    // y = 40 // Compiler-Fehler: val kann nicht neu zugewiesen werden\n\n    println("x = $x, y = $y")\n}
\n\n

Alles scheint offensichtlich, aber der Teufel steckt, wie immer, im Detail.

\n\n

Der Hauptunterschied: Veränderlichkeit der Referenz vs. Veränderlichkeit des Objekts

\n\n

Hier kommt es oft zu Verwirrung. val garantiert, dass sich die Referenz auf das Objekt nicht ändert, aber es garantiert nicht die Unveränderlichkeit des Objekts selbst.

\n\n

Lassen Sie uns das anhand eines Listenbeispiels analysieren:

\n\n
fun main() {\n    val numbers = mutableListOf(1, 2, 3)\n    // numbers = mutableListOf(4, 5, 6) // Fehler: val kann nicht neu zugewiesen werden\n\n    numbers.add(4) // Das ist aber möglich! Wir ändern den Inhalt des Objekts\n    numbers[0] = 100 // Auch das ist möglich\n\n    println(numbers) // [100, 2, 3, 4]\n}
\n\n

Beachten Sie: Wir haben numbers als val deklariert, können aber problemlos Elemente hinzufügen und ändern. Warum? Weil val nur die Referenz selbst (die Variable numbers) schützt, nicht aber das Objekt, auf das sie verweist.

\n\n

Wenn Sie vollständige Unveränderlichkeit wünschen, müssen Sie unveränderliche Kollektionen (listOf, mapOf, setOf) und val gleichzeitig verwenden.

\n\n
fun main() {\n    val immutableNumbers = listOf(1, 2, 3)\n    // immutableNumbers.add(4) // Fehler: listOf gibt eine unveränderliche Liste zurück\n    // immutableNumbers[0] = 100 // Fehler\n}
\n\n

Dies ist ein wichtiger Punkt, der oft in Vorstellungsgesprächen abgefragt wird. Denken Sie daran: val ≠ immutable object.

\n\n

Wann verwendet man var und wann val?

\n\n

Die goldene Regel von Kotlin: Verwenden Sie val überall dort, wo es möglich ist, und var nur dann, wenn es wirklich notwendig ist. Warum?

\n\n
    \n
  • Sicherheit. Je weniger veränderliche Variablen, desto geringer die Wahrscheinlichkeit, versehentlich einen Wert an einer unerwarteten Stelle zu ändern. Dies ist besonders in der Multithread-Programmierung wichtig.
  • \n
  • Lesbarkeit. Wenn Sie val sehen, wissen Sie sofort, dass sich der Wert nicht ändert. Dies vereinfacht das Verständnis des Codes.
  • \n
  • Funktionaler Stil. Kotlin fördert die funktionale Programmierung, bei der Unveränderlichkeit eines der Schlüsselprinzipien ist.
  • \n
\n\n

Hier ist ein Beispiel, bei dem var gerechtfertigt ist:

\n\n
fun main() {\n    var counter = 0\n    while (counter < 10) {\n        println("Counter: $counter")\n        counter++ // Der Zähler muss sich ändern\n    }\n}
\n\n

Und hier ist ein Beispiel, bei dem var eine schlechte Praxis ist und ersetzt werden kann

Blogs

Buchempfehlungen