Les monades Scala, Java 8

32
Les monades Scala, Java 8 Fabrice Sznajderman - Technozaure juin 2015

Transcript of Les monades Scala, Java 8

Page 1: Les monades Scala, Java 8

Les monades Scala, Java 8

Fabrice Sznajderman - Technozaure juin 2015

Page 2: Les monades Scala, Java 8

Qui suis-je?

• Chez Zenika depuis décembre 2014

• Développeur

• Java / Scala / Web

• Big Data

• Actuellement en mission chez ERDF

Page 3: Les monades Scala, Java 8

Les Monades

Page 4: Les monades Scala, Java 8

Objectifs

• Définition (claire)

• Les types monadiques

• Live coding

Page 5: Les monades Scala, Java 8

Sondage

• Qui connait le terme « monade »?

Page 6: Les monades Scala, Java 8

Sondage

• Qui pense ne jamais avoir utilisé une monade?

Page 7: Les monades Scala, Java 8

DéfinitionChapitre 1

Page 8: Les monades Scala, Java 8

Innocence…

Page 9: Les monades Scala, Java 8

Définition formelle

Théorie des catégories

source : Wikipédia

Page 10: Les monades Scala, Java 8

Oh non !

Page 11: Les monades Scala, Java 8

Définition formelle

Page 12: Les monades Scala, Java 8

Définition pragmatique

Page 13: Les monades Scala, Java 8

Une monade, c’est comme une boite …

Page 14: Les monades Scala, Java 8

?

… vide ou ayant un contenu …

Page 15: Les monades Scala, Java 8

… qui fournit des opérations …

?. Op

Page 16: Les monades Scala, Java 8

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

?. Op1 . Op2 . Op3

Page 17: Les monades Scala, Java 8

?

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

. Op

Page 18: Les monades Scala, Java 8

Opérations• map()

• flatmap()

• fold()

• foreach()

• filter()

• …

Page 19: Les monades Scala, Java 8

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. »

Page 20: Les monades Scala, Java 8

Les types monadiquesChapitre 2

Page 21: Les monades Scala, Java 8

Scala

• Option

• Try

• Either

• List

Page 22: Les monades Scala, Java 8

Option

• Présence / absence d’une valeur

• Some / None

Page 23: Les monades Scala, Java 8

Try

• Gestion des exceptions

• Failure / Success

Page 24: Les monades Scala, Java 8

Either

• Gestion de cas d’erreur (~ Try)

• Left / Right

Page 25: Les monades Scala, Java 8

List

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

Page 26: Les monades Scala, Java 8

Java 8

• Optional

• Stream

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

Page 27: Les monades Scala, Java 8

Optional

• Présence / absence d’une valeur

• Pas de sous type

Page 28: Les monades Scala, Java 8

Stream

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

• Flux

Page 29: Les monades Scala, Java 8

Try

• Gestion des exceptions

• Non intégré au JDK

Page 30: Les monades Scala, Java 8

Live codingChapitre 3

Page 31: Les monades Scala, Java 8

Conclusion

• + Lisibilité

• - Complexité

• Il faut garder la maitrise

Page 32: Les monades Scala, Java 8

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