SlideShare une entreprise Scribd logo
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éfinition
Chapitre 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 monadiques
Chapitre 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 coding
Chapitre 3
Conclusion
• + Lisibilité
• - Complexité
• Il faut garder la maitrise
Option(questions).map( _.answers).getOrElse(“Merci de votre attention!”)

Contenu connexe

En vedette

Getting Functional with Scala
Getting Functional with ScalaGetting Functional with Scala
Getting Functional with Scala
Jorge Paez
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocutionParis_Storm_UG
 
Introduction to Spark with Scala
Introduction to Spark with ScalaIntroduction to Spark with Scala
Introduction to Spark with Scala
Himanshu Gupta
 
Hammurabi
HammurabiHammurabi
Hammurabi
Mario Fusco
 
Scala - A Scalable Language
Scala - A Scalable LanguageScala - A Scalable Language
Scala - A Scalable Language
Mario Gleichmann
 
Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008
Yardena Meymann
 
Mémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociauxMémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociaux
Chloé Marty
 
Lagom, reactive framework(chtijug2016)
Lagom, reactive framework(chtijug2016) Lagom, reactive framework(chtijug2016)
Lagom, reactive framework(chtijug2016)
Fabrice Sznajderman
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Ippon
 
BDX 2016 - Tzach zohar @ kenshoo
BDX 2016 - Tzach zohar  @ kenshooBDX 2016 - Tzach zohar  @ kenshoo
BDX 2016 - Tzach zohar @ kenshoo
Ido Shilon
 
Infographic on Scala Programming Language
Infographic on Scala Programming LanguageInfographic on Scala Programming Language
Infographic on Scala Programming Language
Paddy Lock
 
Scala: the language of languages - Mario Fusco (Red Hat)
Scala: the language of languages - Mario Fusco (Red Hat)Scala: the language of languages - Mario Fusco (Red Hat)
Scala: the language of languages - Mario Fusco (Red Hat)
Scala Italy
 
Scala Intro
Scala IntroScala Intro
Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec Storm
Paris_Storm_UG
 
Kafka & Hadoop - for NYC Kafka Meetup
Kafka & Hadoop - for NYC Kafka MeetupKafka & Hadoop - for NYC Kafka Meetup
Kafka & Hadoop - for NYC Kafka Meetup
Gwen (Chen) Shapira
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
Mohammad Hossein Rimaz
 
HBaseCon 2015: NRT Event Processing with Guaranteed Delivery of HTTP Callbacks
HBaseCon 2015: NRT Event Processing with Guaranteed Delivery of HTTP CallbacksHBaseCon 2015: NRT Event Processing with Guaranteed Delivery of HTTP Callbacks
HBaseCon 2015: NRT Event Processing with Guaranteed Delivery of HTTP Callbacks
HBaseCon
 
Lagom : Reactive microservice framework
Lagom : Reactive microservice frameworkLagom : Reactive microservice framework
Lagom : Reactive microservice framework
Fabrice Sznajderman
 
HBaseCon 2015: Industrial Internet Case Study using HBase and TSDB
HBaseCon 2015: Industrial Internet Case Study using HBase and TSDBHBaseCon 2015: Industrial Internet Case Study using HBase and TSDB
HBaseCon 2015: Industrial Internet Case Study using HBase and TSDB
HBaseCon
 

En vedette (20)

Getting Functional with Scala
Getting Functional with ScalaGetting Functional with Scala
Getting Functional with Scala
 
Paris stormusergroup intrudocution
Paris stormusergroup intrudocutionParis stormusergroup intrudocution
Paris stormusergroup intrudocution
 
Introduction to Spark with Scala
Introduction to Spark with ScalaIntroduction to Spark with Scala
Introduction to Spark with Scala
 
Hammurabi
HammurabiHammurabi
Hammurabi
 
Soutenance ysance
Soutenance ysanceSoutenance ysance
Soutenance ysance
 
Scala - A Scalable Language
Scala - A Scalable LanguageScala - A Scalable Language
Scala - A Scalable Language
 
Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008Scala at HUJI PL Seminar 2008
Scala at HUJI PL Seminar 2008
 
Mémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociauxMémoire de fin d'étude - La big data et les réseaux sociaux
Mémoire de fin d'étude - La big data et les réseaux sociaux
 
Lagom, reactive framework(chtijug2016)
Lagom, reactive framework(chtijug2016) Lagom, reactive framework(chtijug2016)
Lagom, reactive framework(chtijug2016)
 
Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...Démystifions le machine learning avec spark par David Martin pour le Salon B...
Démystifions le machine learning avec spark par David Martin pour le Salon B...
 
BDX 2016 - Tzach zohar @ kenshoo
BDX 2016 - Tzach zohar  @ kenshooBDX 2016 - Tzach zohar  @ kenshoo
BDX 2016 - Tzach zohar @ kenshoo
 
Infographic on Scala Programming Language
Infographic on Scala Programming LanguageInfographic on Scala Programming Language
Infographic on Scala Programming Language
 
Scala: the language of languages - Mario Fusco (Red Hat)
Scala: the language of languages - Mario Fusco (Red Hat)Scala: the language of languages - Mario Fusco (Red Hat)
Scala: the language of languages - Mario Fusco (Red Hat)
 
Scala Intro
Scala IntroScala Intro
Scala Intro
 
Apache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec StormApache Storm - Introduction au traitement temps-réel avec Storm
Apache Storm - Introduction au traitement temps-réel avec Storm
 
Kafka & Hadoop - for NYC Kafka Meetup
Kafka & Hadoop - for NYC Kafka MeetupKafka & Hadoop - for NYC Kafka Meetup
Kafka & Hadoop - for NYC Kafka Meetup
 
Introduction to Scala
Introduction to ScalaIntroduction to Scala
Introduction to Scala
 
HBaseCon 2015: NRT Event Processing with Guaranteed Delivery of HTTP Callbacks
HBaseCon 2015: NRT Event Processing with Guaranteed Delivery of HTTP CallbacksHBaseCon 2015: NRT Event Processing with Guaranteed Delivery of HTTP Callbacks
HBaseCon 2015: NRT Event Processing with Guaranteed Delivery of HTTP Callbacks
 
Lagom : Reactive microservice framework
Lagom : Reactive microservice frameworkLagom : Reactive microservice framework
Lagom : Reactive microservice framework
 
HBaseCon 2015: Industrial Internet Case Study using HBase and TSDB
HBaseCon 2015: Industrial Internet Case Study using HBase and TSDBHBaseCon 2015: Industrial Internet Case Study using HBase and TSDB
HBaseCon 2015: Industrial Internet Case Study using HBase and TSDB
 

Similaire à Les monades Scala, Java 8

Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
Association Agile Nantes
 
GetText / Rails - FR
GetText / Rails - FRGetText / Rails - FR
GetText / Rails - FR
Sylvain Abélard
 
GetText / Rails
GetText / RailsGetText / Rails
GetText / Rails
Sylvain Abélard
 
Formation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideFormation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapide
Tarek Jellali
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
tarkan_
 
Eugenio Mauri: Goal directed requirements acquisition
Eugenio Mauri: Goal directed requirements acquisitionEugenio Mauri: Goal directed requirements acquisition
Eugenio Mauri: Goal directed requirements acquisition
Eugenio Mauri
 
Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011yassine kchiri
 
XebiConFr 15 - Développer dans le Cloud
XebiConFr 15 - Développer dans le CloudXebiConFr 15 - Développer dans le Cloud
XebiConFr 15 - Développer dans le Cloud
Publicis Sapient Engineering
 

Similaire à Les monades Scala, Java 8 (9)

Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
 
GetText / Rails - FR
GetText / Rails - FRGetText / Rails - FR
GetText / Rails - FR
 
GetText / Rails
GetText / RailsGetText / Rails
GetText / Rails
 
Formation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapideFormation JavaScript - Guide de démarrage rapide
Formation JavaScript - Guide de démarrage rapide
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Eugenio Mauri: Goal directed requirements acquisition
Eugenio Mauri: Goal directed requirements acquisitionEugenio Mauri: Goal directed requirements acquisition
Eugenio Mauri: Goal directed requirements acquisition
 
Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011Cours java smi_2011_2012_partie_i_29_octobre_2011
Cours java smi_2011_2012_partie_i_29_octobre_2011
 
XebiConFr 15 - Développer dans le Cloud
XebiConFr 15 - Développer dans le CloudXebiConFr 15 - Développer dans le Cloud
XebiConFr 15 - Développer dans le Cloud
 
4711538.pptx
4711538.pptx4711538.pptx
4711538.pptx
 

Les monades Scala, Java 8