ProgrammazioneSviluppatore Backend

Qual è la differenza tra le parole chiave "val" e "var" in Kotlin? Come utilizzarle in modo ottimale dal punto di vista della sicurezza e delle prestazioni del codice?

Supera i colloqui con l'assistente IA Hintsage

Risposta.

val e var vengono entrambi utilizzati per dichiarare variabili, ma hanno differenze fondamentali:

  • val (value): dichiara un riferimento immutabile, solo in lettura. Dopo l'inizializzazione, il valore non può essere riassegnato, il riferimento rimane per sempre a un solo oggetto:
val number = 42 // number = 10 // errore!
  • var (variable): dichiara una variabile mutabile;
var counter = 0 counter++ // consentito

Sicurezza e prestazioni:

  • È preferibile utilizzare val ovunque la variabile non debba cambiare — questo protegge da modifiche accidentali e rende il codice più facile da capire.
  • L'uso di val consente al compilatore e all'IDE di catturare errori in fase di compilazione e ottimizzare il codice.

Domanda trabocchetto.

Un oggetto dichiarato come val può essere modificato?

Risposta: Il valore stesso della variabile (riferimento) non può essere riassegnato, ma se si tratta di un oggetto (ad esempio, una lista), il suo stato interno può essere cambiato.

val list = mutableListOf(1,2) list.add(3) // Consentito! Ma list = altroElenco darà errore.

Esempi di errori reali a causa della mancanza di conoscenza delle sottigliezze dell'argomento.


Storia

Nel progetto di un negozio online, uno sviluppatore ha definito la lista dei prodotti come val items = mutableListOf<Product>(), pensando che in questo modo la lista fosse completamente immutabile. In realtà, in un'altra parte è stata modificata la lista (aggiunto un nuovo elemento), il che ha influenzato inaspettatamente la visualizzazione del carrello.


Storia

Nel parser di grandi file di testo, il buffer array è stato dichiarato come var buffer, anche se durante il parsing non era necessario sostituirlo. È avvenuta accidentalmente una riassegnazione a un nuovo array, portando a una perdita di memoria e a un'elaborazione errata dei dati.


Storia

Nel codice di un microservizio, la maggior parte delle variabili era dichiarata come var "per precauzione", il che ha portato a cambiare lo stato dell'oggetto in espressioni grandi in diversi thread, causando bug difficili da individuare a causa di condizioni di gara.