Les monades Scala, Java 8

Post on 15-Apr-2017

432 views 2 download

Transcript of Les monades Scala, Java 8

Les monades Scala, Java 8

Fabrice Sznajderman - Technozaure juin 2015

Qui suis-je?

• Chez Zenika depuis décembre 2014

• Développeur

• Java / Scala / Web

• Big Data

• Actuellement en mission chez ERDF

Les Monades

Objectifs

• Définition (claire)

• Les types monadiques

• Live coding

Sondage

• Qui connait le terme « monade »?

Sondage

• Qui pense ne jamais avoir utilisé une monade?

DéfinitionChapitre 1

Innocence…

Définition formelle

Théorie des catégories

source : Wikipédia

Oh non !

Définition formelle

Définition pragmatique

Une monade, c’est comme une boite …

?

… vide ou ayant un contenu …

… qui fournit des opérations …

?. Op

… (que l’on peut chaîner) …

?. Op1 . Op2 . Op3

?

… que l’on va pouvoir appliquer sur le contenu (présent ou non)

. Op

Opérations• map()

• flatmap()

• fold()

• foreach()

• filter()

• …

Définition pragmatique

« Une monade est comme une boite, vide ou ayant un contenu, qui nous fournit des opérations au dessus de la valeur éventuellement encapsulée. »

Les types monadiquesChapitre 2

Scala

• Option

• Try

• Either

• List

Option

• Présence / absence d’une valeur

• Some / None

Try

• Gestion des exceptions

• Failure / Success

Either

• Gestion de cas d’erreur (~ Try)

• Left / Right

List

• Ensemble d’élément de même type

Java 8

• Optional

• Stream

• Try (https://github.com/jasongoodwin/better-java-monads)

Optional

• Présence / absence d’une valeur

• Pas de sous type

Stream

• Ensemble d’élément de même type

• Flux

Try

• Gestion des exceptions

• Non intégré au JDK

Live codingChapitre 3

Conclusion

• + Lisibilité

• - Complexité

• Il faut garder la maitrise

Option(questions).map( _.answers).getOrElse(“Merci de votre attention!”)