ProgrammierungBackend-Entwickler

Was ist der Unterschied zwischen den Schlüsselwörtern "val" und "var" in Kotlin? Wie verwendet man sie optimal im Hinblick auf Sicherheit und Code-Performance?

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

val und var – beide werden zum Deklarieren von Variablen verwendet, haben jedoch grundlegende Unterschiede:

  • val (value): deklariert eine unveränderbare, schreibgeschützte Referenz. Nach der Initialisierung kann der Wert nicht neu zugewiesen werden, die Referenz bleibt immer auf dasselbe Objekt:
val number = 42 // number = 10 // Fehler!
  • var (variable): deklariert eine veränderbare Variable;
var counter = 0 counter++ // erlaubt

Sicherheit und Performance:

  • Es ist vorzuziehen, val überall dort zu verwenden, wo sich die Variable nicht ändern sollte – das schützt vor versehentlichen Änderungen und macht den Code leichter verständlich.
  • Die Verwendung von val ermöglicht es dem Compiler und der IDE, Fehler zur Kompilierungszeit zu erfassen und den Code zu optimieren.

Fangfrage.

Kann ein als val deklariertes Objekt geändert werden?

Ergebnis: Der Wert der Variablen (die Referenz) kann nicht neu zugewiesen werden, aber wenn es sich um ein Objekt handelt (z. B. eine Liste), kann dessen innerer Zustand geändert werden.

val list = mutableListOf(1,2) list.add(3) // Kann! Aber list = andereListe wird ein Fehler sein.

Beispiele für reale Fehler aufgrund fehlenden Wissens über die Feinheiten des Themas.


Geschichte

In einem Internet-Shop-Projekt definierte der Entwickler die Liste der Produkte als val items = mutableListOf<Product>(), in der Annahme, dass die Liste vollständig unveränderlich sei. Tatsächlich wurde die Liste jedoch an einer anderen Stelle geändert (ein neues Element hinzugefügt), was unerwartete Auswirkungen auf die Anzeige des Warenkorbs hatte.


Geschichte

Im Parser großer Textdateien wurde der Array-Puffer als var buffer deklariert, obwohl es während des Parsens nicht erforderlich war, ihn zu ersetzen. Aus Versehen wurde ihm versehentlich ein neues Array zugewiesen, was zu einem Speicherleck und falscher Datenverarbeitung führte.


Geschichte

Im Code eines Mikrodienstes wurden die meisten Variablen "vorsichtshalber" als var deklariert, was dazu führte, dass in großen Ausdrücken manchmal der Zustand des Objekts in verschiedenen Threads geändert wurde, was zu schwer auffindbaren Bugs aufgrund von Race Conditions führte.