La programmation fonctionnelle avec Scala

Autour des classes

Scala apporte de nombreuses innovations et utilise des conventions pour faciliter l'écriture de code. Nous allons ici aborder des concepts liés aux classes.

Traits

Les Traits sont la solution imaginée par Stéphane Ducasse pour résoudre le problème de l'héritage multiple. Ils ont été inclus à scala par Martin Odersky.
Ils permettent d'éviter l'écueil de la collision entre variables homonymes d'un même type en héritage multiple. Mais permettent d'hériter des méthode de parents multiples.
Définition : Un trait est une interface (au sens Java) qui a la possibilité de mettre en oeuvre, implanter les méthodes. Pour déclarer un trait on utilise le mot clef trait


Écrire une interface implique de faire un choix entre :

Utiliser un trait permet de proposer d'allier les deux approches. En y écrivant des méthodes précises s'appuyant sur des méthodes abstraites génériques.
Par exemple le trait Ordered en scala propose plusieurs méthodes comme «<, >» qui s'appuient sur une seule méthode abstraite compare

L'objet compagnon

Les classes scala ne peuvent pas avoir de variables ou methods static.
À la place elles peuvent être accompagnés d'un singleton static appelé objet compagnon (Companion Object) défini avec le mots clef object.
Exemple avec cette utilisation de l'objet compagnon pour déclarer la méthode «sayHi» :

Les extracteurs

Les extracteurs sont une fonctionnalité de Scala permettant de faire du pattern matching sur un objet et d’en extraire des propriétés.
Ils sont définis par la méthode unapply de l'objet compagnon.

Remarque : Il existe des classes dont la unapply est prédéfinie pour tous les paramètres de la classe. Ceux sont les case class
Vous trouverez un exemple utilisant un trait et des case class en fin de la partie sur le filtrage par motif