Scala: immutable references & immutable values
Scala prend en charge les styles de codage : immuables et mutables, il est fortement recommandé d’utiliser les variables immuables, mais avant, nous devons comprendre la différence entre les deux.
1. Immutabilité de références
On Utilise le mot-clé val pour affecter la variable age à une valeur via une référence immuable..
val age: Int = 18
La variable age ne peut pas être réaffecté à une autre valeur puisque il s’agit d’une référence immuable.
age = 20 // error: reassignment to val
2. Mutabilité de références
Dans ce cas on utilise le mot-clé var pour affecter la variable age à une valeur entière.
var age: Int = 18
age peut être réaffecté à d’autres entiers, c’est donc une référence mutable.
age = 30
Scala est fortement typée, donc une fois qu’une variable est typée comme un entier, elle ne peut pas être affectée à des valeurs d’autres types.
age = "hello" // error: type mismatch
3. Immutabilité de valeur
Person est une classe qui crée des objets immuables.
class Person(val firstName: String, val lastName: String) {
def fullName(): String = s"$firstName lastName"
}
On instancie la classe Person pour créer un objet immuable :
val bob = new Person("bob", "boubi")
La variable bob est une référence immuable à un objet immuable. Il n’y a aucun moyen pour nous de changer l’état de l’objet une fois qu’il est instancié et c’est pourquoi il est immuable.
4. Mutabilité de valeur
Maintenant on va créer une classe Cat qui crée des objets mutables (modifiables).
class Cat(var name: String) {
def about(): String = s"I am a $name"
}
On crée une instance de la classe Cat.
val catTamy = new Cat("Tamy")
La variable catTamy est une référence immuable à un objet mutable. catTamy ne peut pas être réaffecté, mais l’instance peut être modifiée.
catTamy.name // "Tamy"
catTamy.name = "Felix"
catTamy.name // "Felix"
Finalement, certains langages de programmation n’autorisent que des références immuables et d’autres langages n’autorisent que des références mutables. Scala laisse les programmeurs choisir s’ils veulent utiliser des références immuables ou des références mutables.
La philosophie de conception de Scala consistant à donner un pouvoir de décision au programmeur s’étend au plus haut niveau du langage. Scala peut être utilisé comme un langage orienté objet ou un langage purement fonctionnel.