val und var – beide werden zum Deklarieren von Variablen verwendet, haben jedoch grundlegende Unterschiede:
val number = 42 // number = 10 // Fehler!
var counter = 0 counter++ // erlaubt
Sicherheit und Performance:
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.val ermöglicht es dem Compiler und der IDE, Fehler zur Kompilierungszeit zu erfassen und den Code zu optimieren.Kann ein als
valdeklariertes 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.
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 bufferdeklariert, 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
vardeklariert, 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.