Publié le 17 Décembre 2016

Et bien on ne peut pas définir de constructeur en Scala simplement car cela n'existe pas mais il y a un concept équivalent: les paramètres de classe.

En revanche on peut définir les paramètres directement après le nom de la classe, ce qui donne quelque chose comme ceci:

class Animal(pattes: Int, couleur: String) {
...
}

Comme il n'y a pas de constructeur on peut placé le code du constructeur directement dans le corps de la classe:

class Animal(pattes: Int, couleur: String) {
   private val _pattes: Int
   private val _couleur: String

   println(s"Nouvel animal à $pattes pattes de couleur $couleur")
   _pattes = pattes
   _couleur = couleur
}

Ça marche mais ça fait très "java" niveau style. En fait Scala permet d'effectuer la même chose beaucoup plus simplement.

class Animal(val pattes: Int, val couleur: String) {
   println(s"Nouvel animal à $pattes pattes de couleur $couleur")
}

Quelle est la différence ? Simplement le mot-clé val juste devant chaque paramètre. La différence est que maintenant la classe Animal a une propriété pattes et une propriété couleur accessible publiquement. Comme il s'agit d'un val, cette propriété n'est pas modifiable, il nest donc pas gênant quelle soit publique.

Il est tout à fait possible de la garder privée en utilisant le mot-clé private:

class Animal(private val pattes: Int, private val couleur: String) { ...

Si on veut une propriété modifiable on remplace val par var. Attention dans ce cas, à la visibilité de la propriété qui est par défaut publique.

Enfin il y a le cas particulier des case classes ou il n'est pas nécessaire d'utiliser val car les attributs d'une case class sont immuable et publiquement accessible (à moins d'utiliser private).

case class Animal(pattes: Int, couleur: String)
 

Voir les commentaires

Rédigé par Bliz

Publié dans #Scala

Repost 0