Committed to innovate
LINKVALUE
Ce qui compte
C’est les valeurs !
Introduction à la
programmation fonctionnelle
Linkvalue | whoami
Moi ?
@raphaelbacconni
3	
Lead Dev Backend @LinkValue
•  Développeur Web
•  PHP
•  Java
•  Scala, JavaScript
•  … débute la programmation fonctionnelle avec Scala en
janvier 2015
•  … apprécie la programmation fonctionnelle depuis ± juillet
2015
Why FP
matters ?
Vous avez dit fonctionnelle ?
Des programmes comme suite
d’applications
Sortir du labo
SOMMAIRE
Linkvalue | sommaire
4	
Functions
Everywhere
Function
Closure
Memoïsation
Function Composition
A D T
Algebraic Data Types
Call me Maybe
Traiter les erreurs
Linkvalue | Why FP matters ?
Vous avez dit “fonctionnelle” ?
5	
Qu’est-ce que la programmation fonctionnelle ?
•  Un nouveau langage ?
•  Une nouvelle architecture ?
•  Une manière de rédiger ses tests ?
•  Un nouveau framework JavaScript ?
Linkvalue | Why FP matters ?
Vous avez dit “fonctionnelle” ?
6
Linkvalue | Why FP matters ?
Vous avez dit “fonctionnelle” ?
7	
Qu’est-ce que la programmation fonctionnelle ?
•  Un nouveau langage ?
•  Non ! Mais les langages exposent des apis dédiées au fonctionnel
•  Une nouvelle architecture ?
•  Non ! Mais de nombreux design patterns sont transposables
•  Oui… de nouvelles architectures en découlent
•  Une manière de rédiger ses tests ?
•  Non ! Mais permet d’écrire du code facilement testable
•  Un nouveau framework JavaScript ?
•  Non ! Mais il existe de nombreux frameworks FP
•  … et ce n’est pas non plus (seulement) faire des filter / map / reduce !
Linkvalue | Why FP matters ?
Des programmes comme suites d’applications
8	
Penser mathématiques
•  Toute expression produit une valeur
•  Basé sur le lambda calcul (Alonzo Church, 1930’s) : tout est fonction
•  Influence de la théorie des catégories
•  Parfois présentée comme opposée à la POO
•  …
Linkvalue | Why FP matters ?
Des programmes comme suites d’applications
9	
Application informatique
•  Ne plus raisonner en fonction de changement d’état
•  Appliquer une fonction sur des inputs produit toujours 1 même résultat
•  Principe de substitution et transparence référentielle
•  Fonction « pure »
•  Données immuables
•  Lisp (1958), Scheme (1975), Erlang (1987), Haskell (1990)
•  ML (1973, 1983)
Linkvalue | Why FP matters ?
Sortir du laboratoire
10
Linkvalue | Why FP matters ?
Sortir du laboratoire
11	
Langages impératifs modernes exposent des API fonctionnelles
•  Java 8
•  C#
•  PHP
•  Python
•  Swift
•  Ruby
•  …
Linkvalue | Why FP matters ?
De nouveaux langages
12	
Langages multiparadigmes
•  Scala
•  F#
•  Rust
•  JavaScript 2015
•  Elixir
Fonctionnels (presque) purs
•  Clojure
•  ELM
Linkvalue | Why FP matters ?
Quelles technos ?
13	
Champs d’application
•  Traitement de données : Spark, Apex
•  Messages brokers : Apache Kafka, Rabbitmq
•  Architectures asynchrones et message driven : Akka
•  Data streaming : Apache Flink, Akka Stream, Rx*
•  Serveur web : Playframework, Twitter Finatra, Nodejs
•  Construction d’IHM : Reactjs, Temporal Logic of Actions
Linkvalue | Why FP matters ?
Pour qui ?
14	
Acteurs et domaines d’application
•  Banque, assurances : Axa, April, …
•  Réseaux sociaux : Twitter, LinkedIn, Facebook, WhatsApp, Instagram, …
•  Streaming : Soundcloud, Spotify, Deezer
•  Data storage : Dropbox
Linkvalue | Why FP matters ?
15
W h y F P m a t t e r s ?
Vous avez dit fonctionnelle ?
Des programmes comme suite
d’applications
Sortir du labo
SOMMAIRE
Linkvalue | sommaire
16	
Functions
Everywhere
Function
Closure
Memoïsation
Function Composition
A D T
Algebraic Data Types
Call me Maybe
Traiter les erreurs
Linkvalue | Functions Everywhere
Préambule : coder en scala
17
Linkvalue | Functions Everywhere
TP : afficher une liste d’utilisateurs
18
Linkvalue | Functions Everywhere
TP : afficher une liste d’utilisateurs
19	
Impératif – Orienté Objet
Linkvalue | Functions Everywhere
Function as First Class citizen
20
Linkvalue | Functions Everywhere
Function as First Class citizen
21	
Multiparadigme – Approche fonctionnelle
Linkvalue | Functions Everywhere
Function as First Class citizen
22	
Multiparadigme – Approche fonctionnelle
Linkvalue | Functions Everywhere
TP : Filtrer les utilisateurs en fonction de la conf
23
Linkvalue | Functions Everywhere
TP : Filtrer les utilisateurs en fonction de la conf
24
Linkvalue | Functions Everywhere
Closure
25	
Principes
•  Fonction qui peut accéder aux variables du scope
•  Permet d’embarquer un contexte
•  Initialiser des valeurs depuis une fonction constructeur
Linkvalue | Functions Everywhere
Memoïsation : implémenter un cache local
26
Linkvalue | Functions Everywhere
Memoïsation : implémenter un cache local
27
Linkvalue | Functions Everywhere
TP : rationaliser l’affichage des infos MeetupGuest
28
Linkvalue | Functions Everywhere
TP : rationaliser l’affichage des infos MeetupGuest
29
Linkvalue | Functions Everywhere
TP : rationaliser l’affichage des infos MeetupGuest
30
Linkvalue | Functions Everywhere
Function composition
31	
Principes
•  Créer une fonction qui appliquera successivement n fonctions
•  Permet d’appliquer des transformations indépendamment du contexte
•  Currying & Partiall application function
•  Allège l’écriture de code
Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
32	
Il nous faut :
•  Enrichir les fonctions de sélection d’une donnée
•  Préparer les appels de fonctions avec les paramètres à disposition
•  Transformer légèrement la fonction d’affichage
Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
33	
Il nous faut :
•  Enrichir les fonctions de sélection d’une donnée
Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
34	
Il nous faut :
•  Enrichir les fonctions de sélection d’une donnée
•  Préparer les appels de fonctions avec les paramètres à disposition
Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
35	
Il nous faut :
•  Enrichir les fonctions de sélection d’une donnée
•  Préparer les appels de fonctions avec les paramètres à disposition
•  Transformer légèrement la fonction d’affichage
W h y F P m a t t e r s ?
Vous avez dit fonctionnelle ?
Des programmes comme suite
d’applications
Sortir du labo
SOMMAIRE
Linkvalue | sommaire
36	
F u n c t i o n s
E v e r y w h e r e
Function
Closure
Memoïsation
Function Composition
ADT
Algebraic Data Types
Call me Maybe
Traiter les erreurs
Linkvalue | Algebraic Data Types
Monoïd ! Monad ! Functor !
37
Linkvalue | Algebraic Data Types
Algebraic Data Types
38	
Présentation
•  Structures de données
•  exposent une api d’applications : transformations, morphismes, …
•  Conteneurs : List, Int, String…
•  ≠ Objet
•  Théorie des catégories
Linkvalue | Algebraic Data Types
En pratique
39
Linkvalue | Algebraic Data Types
TP : Afficher les infos des amis
40
Linkvalue | Algebraic Data Types
Gérer les erreurs
41	
Call me maybe : le type Option
•  Conteneur qui contient éventuellement une valeur
•  None : vide
•  Some : contient une valeur
•  Permet d’appliquer des transformations sans avoir à gérer l’absence
de résultat
•  Évite les NullPointerException
•  Permet de définir une application par défaut en cas d’absence de
résultat
•  Aussi appelé Maybe …
Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
42
Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
43
Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
44
Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
45
Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
46
Linkvalue | Algebraic Data Types
Gérer les erreurs
47	
La liberté c’est de choisir, et choisir c’est renoncer : Le type Either
Linkvalue | Algebraic Data Types
Traiter les erreurs : Either Type
48	
Catégoriser les retours avec Either
•  Conteneur qui contient distinctement la valeurs calculée par le
traitement ou une valeur alternative si le traitement échoue
•  Left : Contiendra une information sur l’erreur si une erreur survient
•  Right : Contiendra la valeur telle qu’on l’attend
•  Dans le meilleur des cas : parcours semblable au parcours d’une
Option
•  On récupère l’erreur sous forme d’une valeur
Linkvalue | Pour conclure…
Pour conclure
49
Linkvalue | Pour conclure…
Pour conclure
50	
On aime !
•  Repenser la manière dont on crée des programmes
•  Focus sur les traitements et les transformations
•  Penser valeur
•  Renvoyer les effets de bord en périphérie du cœur de l’application
Does FP rules the world ?
•  On doit faire avec les effets de bord: le fonctionnel pur est compliqué
dans une application d’entreprise
•  Coût du ticket d’entrée peut être élevé
•  Haut niveau d’abstraction : certains traitements peuvent être plus
performants en mode impératif
•  Langages multiparadigmes offrent le choix
•  Possible d’appliquer les concepts de FP dans des langages impératifs
Linkvalue | Merci !
Merci !
51
Linkvalue | Références
Références
52	
Learn
•  https://twitter.github.io/scala_school/
•  http://danielwestheide.com/scala/neophytes.html
•  https://www.scala-exercises.org/
•  https://www.coursera.org/specializations/scala
Articles
•  http://www.vasinov.com/blog/16-months-of-functional-programming/
•  https://medium.com/@sinisalouc/demystifying-the-monad-in-scala-
cc716bb6f534
•  https://www.infoq.com/articles/no-more-mvc-frameworks
Books
•  Functional Programming in Scala, Paul Chiusano and Rúnar Bjarnason,
Manning 2014
•  Functional Programming Patterns in Scala and Clojure - Write Lean
Programs for the JVM, Michael Bevilacqua-Linn, The Pragmatic
Bookshelf 2013
•  Functional Programming in JavaScript, Dan Mantyla, Packt Publishing
2015
•  Mostly adequate Guide to Functional Programming - https://
github.com/MostlyAdequate/mostly-adequate-guide
www.linkvalue.fr
NOUS CONTACTER
MAIL TELEPHONEADRESSE
contact@link-value.fr 01 45 22 30 275 rue de la ruche, 69003, Lyon
Linkvalue | Contact
53	
108 rue des Dames, 75017, Paris

Introduction à la programmation fonctionnelle

  • 1.
  • 2.
    Ce qui compte C’estles valeurs ! Introduction à la programmation fonctionnelle
  • 3.
    Linkvalue | whoami Moi? @raphaelbacconni 3 Lead Dev Backend @LinkValue •  Développeur Web •  PHP •  Java •  Scala, JavaScript •  … débute la programmation fonctionnelle avec Scala en janvier 2015 •  … apprécie la programmation fonctionnelle depuis ± juillet 2015
  • 4.
    Why FP matters ? Vousavez dit fonctionnelle ? Des programmes comme suite d’applications Sortir du labo SOMMAIRE Linkvalue | sommaire 4 Functions Everywhere Function Closure Memoïsation Function Composition A D T Algebraic Data Types Call me Maybe Traiter les erreurs
  • 5.
    Linkvalue | WhyFP matters ? Vous avez dit “fonctionnelle” ? 5 Qu’est-ce que la programmation fonctionnelle ? •  Un nouveau langage ? •  Une nouvelle architecture ? •  Une manière de rédiger ses tests ? •  Un nouveau framework JavaScript ?
  • 6.
    Linkvalue | WhyFP matters ? Vous avez dit “fonctionnelle” ? 6
  • 7.
    Linkvalue | WhyFP matters ? Vous avez dit “fonctionnelle” ? 7 Qu’est-ce que la programmation fonctionnelle ? •  Un nouveau langage ? •  Non ! Mais les langages exposent des apis dédiées au fonctionnel •  Une nouvelle architecture ? •  Non ! Mais de nombreux design patterns sont transposables •  Oui… de nouvelles architectures en découlent •  Une manière de rédiger ses tests ? •  Non ! Mais permet d’écrire du code facilement testable •  Un nouveau framework JavaScript ? •  Non ! Mais il existe de nombreux frameworks FP •  … et ce n’est pas non plus (seulement) faire des filter / map / reduce !
  • 8.
    Linkvalue | WhyFP matters ? Des programmes comme suites d’applications 8 Penser mathématiques •  Toute expression produit une valeur •  Basé sur le lambda calcul (Alonzo Church, 1930’s) : tout est fonction •  Influence de la théorie des catégories •  Parfois présentée comme opposée à la POO •  …
  • 9.
    Linkvalue | WhyFP matters ? Des programmes comme suites d’applications 9 Application informatique •  Ne plus raisonner en fonction de changement d’état •  Appliquer une fonction sur des inputs produit toujours 1 même résultat •  Principe de substitution et transparence référentielle •  Fonction « pure » •  Données immuables •  Lisp (1958), Scheme (1975), Erlang (1987), Haskell (1990) •  ML (1973, 1983)
  • 10.
    Linkvalue | WhyFP matters ? Sortir du laboratoire 10
  • 11.
    Linkvalue | WhyFP matters ? Sortir du laboratoire 11 Langages impératifs modernes exposent des API fonctionnelles •  Java 8 •  C# •  PHP •  Python •  Swift •  Ruby •  …
  • 12.
    Linkvalue | WhyFP matters ? De nouveaux langages 12 Langages multiparadigmes •  Scala •  F# •  Rust •  JavaScript 2015 •  Elixir Fonctionnels (presque) purs •  Clojure •  ELM
  • 13.
    Linkvalue | WhyFP matters ? Quelles technos ? 13 Champs d’application •  Traitement de données : Spark, Apex •  Messages brokers : Apache Kafka, Rabbitmq •  Architectures asynchrones et message driven : Akka •  Data streaming : Apache Flink, Akka Stream, Rx* •  Serveur web : Playframework, Twitter Finatra, Nodejs •  Construction d’IHM : Reactjs, Temporal Logic of Actions
  • 14.
    Linkvalue | WhyFP matters ? Pour qui ? 14 Acteurs et domaines d’application •  Banque, assurances : Axa, April, … •  Réseaux sociaux : Twitter, LinkedIn, Facebook, WhatsApp, Instagram, … •  Streaming : Soundcloud, Spotify, Deezer •  Data storage : Dropbox
  • 15.
    Linkvalue | WhyFP matters ? 15
  • 16.
    W h yF P m a t t e r s ? Vous avez dit fonctionnelle ? Des programmes comme suite d’applications Sortir du labo SOMMAIRE Linkvalue | sommaire 16 Functions Everywhere Function Closure Memoïsation Function Composition A D T Algebraic Data Types Call me Maybe Traiter les erreurs
  • 17.
    Linkvalue | FunctionsEverywhere Préambule : coder en scala 17
  • 18.
    Linkvalue | FunctionsEverywhere TP : afficher une liste d’utilisateurs 18
  • 19.
    Linkvalue | FunctionsEverywhere TP : afficher une liste d’utilisateurs 19 Impératif – Orienté Objet
  • 20.
    Linkvalue | FunctionsEverywhere Function as First Class citizen 20
  • 21.
    Linkvalue | FunctionsEverywhere Function as First Class citizen 21 Multiparadigme – Approche fonctionnelle
  • 22.
    Linkvalue | FunctionsEverywhere Function as First Class citizen 22 Multiparadigme – Approche fonctionnelle
  • 23.
    Linkvalue | FunctionsEverywhere TP : Filtrer les utilisateurs en fonction de la conf 23
  • 24.
    Linkvalue | FunctionsEverywhere TP : Filtrer les utilisateurs en fonction de la conf 24
  • 25.
    Linkvalue | FunctionsEverywhere Closure 25 Principes •  Fonction qui peut accéder aux variables du scope •  Permet d’embarquer un contexte •  Initialiser des valeurs depuis une fonction constructeur
  • 26.
    Linkvalue | FunctionsEverywhere Memoïsation : implémenter un cache local 26
  • 27.
    Linkvalue | FunctionsEverywhere Memoïsation : implémenter un cache local 27
  • 28.
    Linkvalue | FunctionsEverywhere TP : rationaliser l’affichage des infos MeetupGuest 28
  • 29.
    Linkvalue | FunctionsEverywhere TP : rationaliser l’affichage des infos MeetupGuest 29
  • 30.
    Linkvalue | FunctionsEverywhere TP : rationaliser l’affichage des infos MeetupGuest 30
  • 31.
    Linkvalue | FunctionsEverywhere Function composition 31 Principes •  Créer une fonction qui appliquera successivement n fonctions •  Permet d’appliquer des transformations indépendamment du contexte •  Currying & Partiall application function •  Allège l’écriture de code
  • 32.
    Linkvalue | FunctionsEverywhere TP : composer nos fonctions d’affichage 32 Il nous faut : •  Enrichir les fonctions de sélection d’une donnée •  Préparer les appels de fonctions avec les paramètres à disposition •  Transformer légèrement la fonction d’affichage
  • 33.
    Linkvalue | FunctionsEverywhere TP : composer nos fonctions d’affichage 33 Il nous faut : •  Enrichir les fonctions de sélection d’une donnée
  • 34.
    Linkvalue | FunctionsEverywhere TP : composer nos fonctions d’affichage 34 Il nous faut : •  Enrichir les fonctions de sélection d’une donnée •  Préparer les appels de fonctions avec les paramètres à disposition
  • 35.
    Linkvalue | FunctionsEverywhere TP : composer nos fonctions d’affichage 35 Il nous faut : •  Enrichir les fonctions de sélection d’une donnée •  Préparer les appels de fonctions avec les paramètres à disposition •  Transformer légèrement la fonction d’affichage
  • 36.
    W h yF P m a t t e r s ? Vous avez dit fonctionnelle ? Des programmes comme suite d’applications Sortir du labo SOMMAIRE Linkvalue | sommaire 36 F u n c t i o n s E v e r y w h e r e Function Closure Memoïsation Function Composition ADT Algebraic Data Types Call me Maybe Traiter les erreurs
  • 37.
    Linkvalue | AlgebraicData Types Monoïd ! Monad ! Functor ! 37
  • 38.
    Linkvalue | AlgebraicData Types Algebraic Data Types 38 Présentation •  Structures de données •  exposent une api d’applications : transformations, morphismes, … •  Conteneurs : List, Int, String… •  ≠ Objet •  Théorie des catégories
  • 39.
    Linkvalue | AlgebraicData Types En pratique 39
  • 40.
    Linkvalue | AlgebraicData Types TP : Afficher les infos des amis 40
  • 41.
    Linkvalue | AlgebraicData Types Gérer les erreurs 41 Call me maybe : le type Option •  Conteneur qui contient éventuellement une valeur •  None : vide •  Some : contient une valeur •  Permet d’appliquer des transformations sans avoir à gérer l’absence de résultat •  Évite les NullPointerException •  Permet de définir une application par défaut en cas d’absence de résultat •  Aussi appelé Maybe …
  • 42.
    Linkvalue | AlgebraicData Types Gérer les erreurs – Option Type 42
  • 43.
    Linkvalue | AlgebraicData Types Gérer les erreurs – Option Type 43
  • 44.
    Linkvalue | AlgebraicData Types Gérer les erreurs – Option Type 44
  • 45.
    Linkvalue | AlgebraicData Types Gérer les erreurs – Option Type 45
  • 46.
    Linkvalue | AlgebraicData Types Gérer les erreurs – Option Type 46
  • 47.
    Linkvalue | AlgebraicData Types Gérer les erreurs 47 La liberté c’est de choisir, et choisir c’est renoncer : Le type Either
  • 48.
    Linkvalue | AlgebraicData Types Traiter les erreurs : Either Type 48 Catégoriser les retours avec Either •  Conteneur qui contient distinctement la valeurs calculée par le traitement ou une valeur alternative si le traitement échoue •  Left : Contiendra une information sur l’erreur si une erreur survient •  Right : Contiendra la valeur telle qu’on l’attend •  Dans le meilleur des cas : parcours semblable au parcours d’une Option •  On récupère l’erreur sous forme d’une valeur
  • 49.
    Linkvalue | Pourconclure… Pour conclure 49
  • 50.
    Linkvalue | Pourconclure… Pour conclure 50 On aime ! •  Repenser la manière dont on crée des programmes •  Focus sur les traitements et les transformations •  Penser valeur •  Renvoyer les effets de bord en périphérie du cœur de l’application Does FP rules the world ? •  On doit faire avec les effets de bord: le fonctionnel pur est compliqué dans une application d’entreprise •  Coût du ticket d’entrée peut être élevé •  Haut niveau d’abstraction : certains traitements peuvent être plus performants en mode impératif •  Langages multiparadigmes offrent le choix •  Possible d’appliquer les concepts de FP dans des langages impératifs
  • 51.
    Linkvalue | Merci! Merci ! 51
  • 52.
    Linkvalue | Références Références 52 Learn • https://twitter.github.io/scala_school/ •  http://danielwestheide.com/scala/neophytes.html •  https://www.scala-exercises.org/ •  https://www.coursera.org/specializations/scala Articles •  http://www.vasinov.com/blog/16-months-of-functional-programming/ •  https://medium.com/@sinisalouc/demystifying-the-monad-in-scala- cc716bb6f534 •  https://www.infoq.com/articles/no-more-mvc-frameworks Books •  Functional Programming in Scala, Paul Chiusano and Rúnar Bjarnason, Manning 2014 •  Functional Programming Patterns in Scala and Clojure - Write Lean Programs for the JVM, Michael Bevilacqua-Linn, The Pragmatic Bookshelf 2013 •  Functional Programming in JavaScript, Dan Mantyla, Packt Publishing 2015 •  Mostly adequate Guide to Functional Programming - https:// github.com/MostlyAdequate/mostly-adequate-guide
  • 53.
    www.linkvalue.fr NOUS CONTACTER MAIL TELEPHONEADRESSE contact@link-value.fr01 45 22 30 275 rue de la ruche, 69003, Lyon Linkvalue | Contact 53 108 rue des Dames, 75017, Paris