val et var sont tous deux utilisés pour déclarer des variables, mais ils ont des différences fondamentales :
val number = 42 // number = 10 // erreur !
var counter = 0 counter++ // autorisé
Sécurité et performance :
val partout où la variable ne doit pas changer — cela protège contre les modifications accidentelles et rend le code plus facile à comprendre.val permet au compilateur et à l'IDE de détecter les erreurs au moment de la compilation et d'optimiser le code.Un objet déclaré comme
valpeut-il être modifié ?
Réponse : La valeur de la variable elle-même (référence) ne peut pas être réaffectée, mais si c'est un objet (par exemple, une liste), son état interne peut être modifié.
val list = mutableListOf(1, 2) list.add(3) // Possible ! En revanche, list = autreListe sera une erreur.
Histoire
Dans un projet de magasin en ligne, un développeur a défini la liste des produits comme
val items = mutableListOf<Product>(), pensant que la liste était complètement immuable. En réalité, à un autre endroit, la liste a été modifiée (un nouvel élément a été ajouté), ce qui a affecté de manière inattendue l'affichage du panier.
Histoire
Dans un parseur de grands fichiers texte, le tampon tableau a été déclaré comme
var buffer, bien qu'il n'ait pas eu besoin d'être remplacé pendant le processus de parsing. Une réaffectation accidentelle à un nouveau tableau a entraîné une fuite de mémoire et un traitement incorrect des données.
Histoire
Dans le code d'un microservice, la plupart des variables étaient déclarées comme
var"au cas où", ce qui a conduit à des modifications d'état de l'objet dans différents threads dans de grandes expressions, entraînant des bugs difficiles à détecter en raison d'une condition de course.