les monades scala, java 8
TRANSCRIPT
![Page 1: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/1.jpg)
Les monades Scala, Java 8
Fabrice Sznajderman - Technozaure juin 2015
![Page 2: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/3.jpg)
Les Monades
![Page 4: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/4.jpg)
Objectifs
• Définition (claire)
• Les types monadiques
• Live coding
![Page 5: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/5.jpg)
Sondage
• Qui connait le terme « monade »?
![Page 6: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/6.jpg)
Sondage
• Qui pense ne jamais avoir utilisé une monade?
![Page 7: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/7.jpg)
DéfinitionChapitre 1
![Page 8: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/8.jpg)
Innocence…
![Page 9: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/9.jpg)
Définition formelle
Théorie des catégories
source : Wikipédia
![Page 10: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/10.jpg)
Oh non !
![Page 11: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/11.jpg)
Définition formelle
![Page 12: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/12.jpg)
Définition pragmatique
![Page 13: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/13.jpg)
Une monade, c’est comme une boite …
![Page 14: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/14.jpg)
?
… vide ou ayant un contenu …
![Page 15: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/15.jpg)
… qui fournit des opérations …
?. Op
![Page 16: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/16.jpg)
… (que l’on peut chaîner) …
?. Op1 . Op2 . Op3
![Page 17: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/17.jpg)
?
… que l’on va pouvoir appliquer sur le contenu (présent ou non)
. Op
![Page 18: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/18.jpg)
Opérations• map()
• flatmap()
• fold()
• foreach()
• filter()
• …
![Page 19: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/20.jpg)
Les types monadiquesChapitre 2
![Page 21: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/21.jpg)
Scala
• Option
• Try
• Either
• List
![Page 22: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/22.jpg)
Option
• Présence / absence d’une valeur
• Some / None
![Page 23: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/23.jpg)
Try
• Gestion des exceptions
• Failure / Success
![Page 24: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/24.jpg)
Either
• Gestion de cas d’erreur (~ Try)
• Left / Right
![Page 25: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/25.jpg)
List
• Ensemble d’élément de même type
![Page 26: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/26.jpg)
Java 8
• Optional
• Stream
• Try (https://github.com/jasongoodwin/better-java-monads)
![Page 27: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/27.jpg)
Optional
• Présence / absence d’une valeur
• Pas de sous type
![Page 28: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/28.jpg)
Stream
• Ensemble d’élément de même type
• Flux
![Page 29: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/29.jpg)
Try
• Gestion des exceptions
• Non intégré au JDK
![Page 30: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/30.jpg)
Live codingChapitre 3
![Page 31: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/31.jpg)
Conclusion
• + Lisibilité
• - Complexité
• Il faut garder la maitrise
![Page 32: Les monades Scala, Java 8](https://reader034.vdocuments.pub/reader034/viewer/2022042600/587b22851a28ab736c8b6dc1/html5/thumbnails/32.jpg)
Option(questions).map( _.answers).getOrElse(“Merci de votre attention!”)