Committed to innovate
LINKVALUE
Ce qui compte
C’est les valeurs !
Introduction à la programmation
fonctionnelle
Linkvalue | whoami
Moi ?
@raphaelbacconni
2
Lead Dev Backend @LinkValue
• Développeur Web
• PHP
• Java
• Scala, JavaScript...
Why FP
matters ?
Vous avez dit fonctionnel ?
Des programmes comme suite
d’applications
Sortir du labo
SOMMAIRE
Linkvalue |...
Linkvalue | Why FP matters ?
Vous avez dit “fonctionnelle” ?
4
Qu’est-ce que la programmation fonctionnelle ?
• Un nouveau...
Linkvalue | Why FP matters ?
Vous avez dit “fonctionnelle” ?
5
Linkvalue | Why FP matters ?
Vous avez dit “fonctionnelle” ?
6
Qu’est-ce que la programmation fonctionnelle ?
• Un nouveau...
Linkvalue | Why FP matters ?
Des programmes comme suites d’applications
7
Penser mathématiques
• Toute expression produit ...
Linkvalue | Why FP matters ?
Des programmes comme suites d’applications
8
Application informatique
• Ne plus raisonner en ...
Linkvalue | Why FP matters ?
Sortir du laboratoire
9
Linkvalue | Why FP matters ?
Sortir du laboratoire
10
Langages impératifs modernes exposent des API fonctionnelles
• Java ...
Linkvalue | Why FP matters ?
De nouveaux langages
11
Langages multiparadigmes
• Scala
• F#
• Rust
• JavaScript 2015
• Elix...
Linkvalue | Why FP matters ?
Quelles technos ?
12
Champs d’application
• Traitement de données : Spark, Apex
• Messages br...
Linkvalue | Why FP matters ?
Pour qui ?
13
Acteurs et domaines d’application
• Banque, assurances : Axa, April, …
• Réseau...
Linkvalue | Why FP matters ?
14
W h y F P m a t t e r s ?
V o u s a v e z d i t f o n c t i o n n e l ?
D e s p r o g r a m m e s c o m m e
s u i t e d ’ ...
Linkvalue | Functions Everywhere
Préambule : coder en scala
16
Linkvalue | Functions Everywhere
TP : afficher une liste d’utilisateurs
17
Linkvalue | Functions Everywhere
TP : afficher une liste d’utilisateurs
18
Impératif – Orienté Objet
Linkvalue | Functions Everywhere
Function as First Class citizen
19
Linkvalue | Functions Everywhere
Function as First Class citizen
20
Multiparadigme – Approche fonctionnelle
Linkvalue | Functions Everywhere
Function as First Class citizen
21
Multiparadigme – Approche fonctionnelle
Linkvalue | Functions Everywhere
TP : Filtrer les utilisateurs en fonction de la conf
22
Linkvalue | Functions Everywhere
TP : Filtrer les utilisateurs en fonction de la conf
23
Linkvalue | Functions Everywhere
Closure
24
Principes
• Fonction qui peut accéder aux variables du scope
• Permet d’embarq...
Linkvalue | Functions Everywhere
Memoïsation : implémenter un cache local
25
Linkvalue | Functions Everywhere
Memoïsation : implémenter un cache local
26
Linkvalue | Functions Everywhere
TP : rationaliser l’affichage des infos MeetupGuest
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
Function composition
30
Principes
• Créer une fonction qui appliquera successivement n fo...
Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
31
Il nous faut :
• Enrichir les fonctions de sél...
Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
32
Il nous faut :
• Enrichir les fonctions de sél...
Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
33
Il nous faut :
• Enrichir les fonctions de sél...
Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
34
Il nous faut :
• Enrichir les fonctions de sél...
W h y F P m a t t e r s ?
V o u s a v e z d i t f o n c t i o n n e l ?
D e s p r o g r a m m e s c o m m e
s u i t e d ’ ...
Linkvalue | Algebraic Data Types
Monoïd ! Monad ! Functor !
36
Linkvalue | Algebraic Data Types
Algebraic Data Types
37
Présentation
• Structures de données
• exposent une api d’applica...
Linkvalue | Algebraic Data Types
En pratique
38
Linkvalue | Algebraic Data Types
TP : Afficher les infos des amis
39
Linkvalue | Algebraic Data Types
Gérer les erreurs
40
Call me maybe : le type Option
• Conteneur qui contient éventuelleme...
Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
41
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
46
La liberté c’est de choisir, et choisir c’est renoncer : Le type Eit...
Linkvalue | Algebraic Data Types
Traiter les erreurs : Either Type
47
Catégoriser les retours avec Either
• Conteneur qui ...
Linkvalue | Pour conclure…
Pour conclure
48
Linkvalue | Pour conclure…
Pour conclure
49
On aime !
• Repenser la manière dont on crée des programmes
• Focus sur les tr...
Linkvalue | Merci !
Merci !
50
Linkvalue | Références
Références
51
Learn
• https://twitter.github.io/scala_school/
• http://danielwestheide.com/scala/ne...
www.linkvalue.fr
NOUS CONTACTER
MAIL TELEPHONEADRESSE
Raphaël Bacconnier| Partner Tech
raphael.bacconnier@link-value.fr
06...
Prochain SlideShare
Chargement dans…5
×

Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle

102 vues

Publié le

Autrefois cantonnée aux laboratoires ou aux esprits les plus fous, la programmation fonctionnelle s'invite depuis quelques années dans les applications web et d'entreprises au travers de langages comme Scala, F# mais aussi JavaScript, au point de devenir un des sujets chaud du moment.

Mais les habitudes ont la vie dure, et sortir de sa zone de confort de développeur impératif maître de Java, Python ou PHP n'est pas chose facile, les bénéfices n'étant pas forcément évidents.

C'est toutefois le chemin que je vous propose d'entreprendre, au travers d'une introduction pragmatique aux concepts et principes portés par la programmation fonctionnelle.

Cette présentation a été effectuée dans le cadre du meetup Link Value Tech du 10 janvier 2017.

Publié dans : Ingénierie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
102
Sur SlideShare
0
Issues des intégrations
0
Intégrations
0
Actions
Partages
0
Téléchargements
1
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle

  1. 1. Committed to innovate LINKVALUE
  2. 2. Ce qui compte C’est les valeurs ! Introduction à la programmation fonctionnelle
  3. 3. Linkvalue | whoami Moi ? @raphaelbacconni 2 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. 4. Why FP matters ? Vous avez dit fonctionnel ? Des programmes comme suite d’applications Sortir du labo SOMMAIRE Linkvalue | sommaire 3 Functions Everywhere Function Closure Memoïsation Function Composition AD T A l g e b r a i c D a t a T y p e s C a l l m e M a y b e T r a i t e r l e s e r r e u r s
  5. 5. Linkvalue | Why FP matters ? Vous avez dit “fonctionnelle” ? 4 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. 6. Linkvalue | Why FP matters ? Vous avez dit “fonctionnelle” ? 5
  7. 7. Linkvalue | Why FP matters ? Vous avez dit “fonctionnelle” ? 6 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. 8. Linkvalue | Why FP matters ? Des programmes comme suites d’applications 7 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. 9. Linkvalue | Why FP matters ? Des programmes comme suites d’applications 8 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. 10. Linkvalue | Why FP matters ? Sortir du laboratoire 9
  11. 11. Linkvalue | Why FP matters ? Sortir du laboratoire 10 Langages impératifs modernes exposent des API fonctionnelles • Java 8 • C# • PHP • Python • Swift • Ruby • …
  12. 12. Linkvalue | Why FP matters ? De nouveaux langages 11 Langages multiparadigmes • Scala • F# • Rust • JavaScript 2015 • Elixir Fonctionnels (presque) purs • Clojure • ELM
  13. 13. Linkvalue | Why FP matters ? Quelles technos ? 12 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. 14. Linkvalue | Why FP matters ? Pour qui ? 13 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. 15. Linkvalue | Why FP matters ? 14
  16. 16. W h y F P m a t t e r s ? V o u s a v e z d i t f o n c t i o n n e l ? D e s p r o g r a m m e s c o m m e s u i t e d ’ a p p l i c a t i o n s S o r t i r d u l a b o SOMMAIRE Linkvalue | sommaire 15 Functions Everywhere Function Closure Memoïsation Function Composition AD T A l g e b r a i c D a t a T y p e s C a l l m e M a y b e T r a i t e r l e s e r r e u r s
  17. 17. Linkvalue | Functions Everywhere Préambule : coder en scala 16
  18. 18. Linkvalue | Functions Everywhere TP : afficher une liste d’utilisateurs 17
  19. 19. Linkvalue | Functions Everywhere TP : afficher une liste d’utilisateurs 18 Impératif – Orienté Objet
  20. 20. Linkvalue | Functions Everywhere Function as First Class citizen 19
  21. 21. Linkvalue | Functions Everywhere Function as First Class citizen 20 Multiparadigme – Approche fonctionnelle
  22. 22. Linkvalue | Functions Everywhere Function as First Class citizen 21 Multiparadigme – Approche fonctionnelle
  23. 23. Linkvalue | Functions Everywhere TP : Filtrer les utilisateurs en fonction de la conf 22
  24. 24. Linkvalue | Functions Everywhere TP : Filtrer les utilisateurs en fonction de la conf 23
  25. 25. Linkvalue | Functions Everywhere Closure 24 Principes • Fonction qui peut accéder aux variables du scope • Permet d’embarquer un contexte • Initialiser des valeurs depuis une fonction constructeur
  26. 26. Linkvalue | Functions Everywhere Memoïsation : implémenter un cache local 25
  27. 27. Linkvalue | Functions Everywhere Memoïsation : implémenter un cache local 26
  28. 28. Linkvalue | Functions Everywhere TP : rationaliser l’affichage des infos MeetupGuest 27
  29. 29. Linkvalue | Functions Everywhere TP : rationaliser l’affichage des infos MeetupGuest 28
  30. 30. Linkvalue | Functions Everywhere TP : rationaliser l’affichage des infos MeetupGuest 29
  31. 31. Linkvalue | Functions Everywhere Function composition 30 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. 32. Linkvalue | Functions Everywhere TP : composer nos fonctions d’affichage 31 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. 33. Linkvalue | Functions Everywhere TP : composer nos fonctions d’affichage 32 Il nous faut : • Enrichir les fonctions de sélection d’une donnée
  34. 34. Linkvalue | Functions Everywhere TP : composer nos fonctions d’affichage 33 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. 35. 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 • Transformer légèrement la fonction d’affichage
  36. 36. W h y F P m a t t e r s ? V o u s a v e z d i t f o n c t i o n n e l ? D e s p r o g r a m m e s c o m m e s u i t e d ’ a p p l i c a t i o n s S o r t i r d u l a b o SOMMAIRE Linkvalue | sommaire 35 F u n c t i o n s E v e r yw h e r e F u n c t i o n C l o s u r e M e m o ï s a t i o n F u n c t i o n C o m p o s i t i o n ADT Algebraic Data Types Call me Maybe Traiter les erreurs
  37. 37. Linkvalue | Algebraic Data Types Monoïd ! Monad ! Functor ! 36
  38. 38. Linkvalue | Algebraic Data Types Algebraic Data Types 37 Présentation • Structures de données • exposent une api d’applications : transformations, morphismes, … • Conteneurs : List, Int, String… • ≠ Objet • Théorie des catégories
  39. 39. Linkvalue | Algebraic Data Types En pratique 38
  40. 40. Linkvalue | Algebraic Data Types TP : Afficher les infos des amis 39
  41. 41. Linkvalue | Algebraic Data Types Gérer les erreurs 40 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. 42. Linkvalue | Algebraic Data Types Gérer les erreurs – Option Type 41
  43. 43. Linkvalue | Algebraic Data Types Gérer les erreurs – Option Type 42
  44. 44. Linkvalue | Algebraic Data Types Gérer les erreurs – Option Type 43
  45. 45. Linkvalue | Algebraic Data Types Gérer les erreurs – Option Type 44
  46. 46. Linkvalue | Algebraic Data Types Gérer les erreurs – Option Type 45
  47. 47. Linkvalue | Algebraic Data Types Gérer les erreurs 46 La liberté c’est de choisir, et choisir c’est renoncer : Le type Either
  48. 48. Linkvalue | Algebraic Data Types Traiter les erreurs : Either Type 47 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. 49. Linkvalue | Pour conclure… Pour conclure 48
  50. 50. Linkvalue | Pour conclure… Pour conclure 49 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. 51. Linkvalue | Merci ! Merci ! 50
  52. 52. Linkvalue | Références Références 51 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. 53. www.linkvalue.fr NOUS CONTACTER MAIL TELEPHONEADRESSE Raphaël Bacconnier| Partner Tech raphael.bacconnier@link-value.fr 06 61 32 19 97 01 45 22 30 27 5 rue de la ruche, 69003, Lyon Linkvalue | Nom de la partie 52 108 rue des Dames, 75017, Paris

×