Case class Case class
1. Définition
Une case class est une classe qui présente trois grands avantages supplémentaires.
Premièrement, une méthode apply est systématiquement présente dans son objet compagnon (cf. chapitre Un aperçu du langage - Objets singletons) ce qui permet de créer une instance d’une case class sans le préfixe new. Cela rend le code moins encombré et donc plus lisible.
Deuxièmement, tous ses paramètres sont des val, c’est-à-dire des variables immuables, comme décrit dans le chapitre Un aperçu du langage - Variables, ce qui permet d’y accéder plus facilement.
Troisièmement, les méthodes toString, hashCode et equals sont automatiquement implémentées et de façon plus naturelle : respectivement, elles affichent, hachent et comparent un arbre construit à partir des arguments de la case class. Cela permet de comparer et lire les case class plus efficacement.
Prenons comme exemple une classe abstraite ClasseCouleur et une case class CouleurPleine qui étend cette classe.
abstract class ClasseCouleur
// defined class ClasseCouleur
case class CouleurPleine(nom: String) extends ClasseCouleur
// defined class CouleurPleine
Avec une instance de la classe CouleurPleine, on peut accéder à son paramètre nom.
val couleur = CouleurPleine("rouge")
// couleur: CouleurPleine = CouleurPleine("rouge")
...