LEARN | Scala - Design Patterns
Contenu
Contenu
Le language Scala est très riche en design patterns qui ne sont pas «built-in», ce qui les rend parfois difficile à repérer et à écrire de façon «correcte».
Note
Il est tout à fait possible de développer des applications sans ces techniques.
Cependant, leur utilisation simplifie grandement la code base.
Typeclass
Les Type Class sont un concept puissant et flexible permettant le polymorphisme ad hoc.
Plus simplement, nous allons décrire un comportement qui s’adaptera au type passé en paramètre.
|
|
Implicit Conversion
Les conversions implicites sont un ensemble de méthodes que Scala essaie d’appliquer lorsqu’il rencontre un objet du mauvais type utilisé.
Définissions certaines conversions implicites courrantes: Int, List[T], Option[T]
|
|
Prenons l’exemple de List[Option[Int]]
, le compilateur sera capable de retrouver les 3 conversions implicites et de résoudre chaque niveau d’imbrication:
List[T]
, puisOption[T]
et enfinInt
Note
Generic Function
Nous allons pouvoir créer une fonction générique qui pourra gérer tous les types possédant une conversion implicite (définies précedemment), même si ces types sont imbriqués.
|
|
Nous avons donc développé une super fonction générique qui est capable de résoudre tous les types (polymophisme) du moment que la conversion implicite est définie.
Monoid
L’ensemble des patterns appliqués precedemment nous ont permis de créer ce que l’on appelle en programmation fonctionnelle un Monoid.
Un monoid est un type qui possède les caractéristiques suivantes:
- Type A en paramètre
- Implémente une zero value
- Implémente une opération d’association
- Respecte la loi d’associativité:
op(op(x,y), z) == op(x, op(y,z))
- Respecte la loi d’identié:
op(x, zero) == x et op(zero, x) == x
|
|
Conclusion
Pour conclure, ces designs patterns permettent de cacher la complexité et d’exposer une unique fonction générique polymorphique et user-friendly pour les utilisateurs finaux.