val en var worden beide gebruikt om variabelen te declareren, maar ze hebben fundamentele verschillen:
val number = 42 // number = 10 // fout!
var counter = 0 counter++ // toegestaan
Veiligheid en prestaties:
val te gebruiken waar de variabele niet mag veranderen — dit beschermt tegen toevallige wijzigingen en maakt de code makkelijker te begrijpen.val stelt de compiler en IDE in staat om fouten tijdens de compilatie op te vangen en de code te optimaliseren.Kan een object dat als
valis gedeclareerd worden gewijzigd?
Verluid: De waarde van de variabele zelf (referentie) kan niet opnieuw worden toegewezen, maar als het een object is (bijvoorbeeld een lijst), kan de interne toestand worden gewijzigd.
val list = mutableListOf(1,2) list.add(3) // Mag! Maar list = eenAndereLijst zal een fout zijn.
Verhaal
In het project van een webwinkel had de ontwikkelaar de lijst met producten gedefinieerd als
val items = mutableListOf<Product>(), denkende dat de lijst volledig onveranderlijk was. In werkelijkheid was de lijst in een andere sectie gewijzigd (een nieuw element toegevoegd), wat onverwacht invloed had op de weergave van de winkelwagentjes.
Verhaal
In een parser voor grote tekstbestanden was de array-buffer gedeclareerd als
var buffer, hoewel het tijdens het parseren niet vervangen hoefde te worden. Per ongeluk werd het opnieuw toegewezen aan een nieuwe array, wat leidde tot geheugenlekken en onjuiste gegevensverwerking.
Verhaal
In de code van een microservice werden de meeste variabelen als
vargedeclareerd "voor het geval", wat resulteerde in het soms veranderen van de toestand van het object in verschillende threads, wat leidde tot hard te traceren bugs door race conditions.