Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
-
Upload
raphael-bacconnier -
Category
Engineering
-
view
126 -
download
1
Transcript of Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
Committed to innovateLINKVALUE
Ce qui compteC’est les valeurs !
Introduction à la programmation fonctionnelle
3Linkvalue | whoami
Moi ?
@raphaelbacconni
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 ?Vous avez dit fonctionnel ?
Des programmes comme suite d’applicationsSortir du labo
SOMMAIRE
Linkvalue | sommaire
Functions Everywhere
FunctionClosure
Memoïsation Function Composition
A D T
A l g e b r a i c D a t a Ty p e sC a l l m e M a y b e
Tr a i t e r l e s e r r e u r s
5Linkvalue | Why FP matters ?
Vous avez dit “fonctionnelle” ?
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 ?
6Linkvalue | Why FP matters ?
Vous avez dit “fonctionnelle” ?
7Linkvalue | Why FP matters ?
Vous avez dit “fonctionnelle” ?
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
!
8Linkvalue | Why FP matters ?
Des programmes comme suites d’applications
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
• …
9Linkvalue | Why FP matters ?
Des programmes comme suites d’applications
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)
10Linkvalue | Why FP matters ?
Sortir du laboratoire
11Linkvalue | Why FP matters ?
Sortir du laboratoire
Langages impératifs modernes exposent des API fonctionnelles
• Java 8
• C#
• PHP
• Python
• Swift
• Ruby
• …
12Linkvalue | Why FP matters ?
De nouveaux langages
Langages multiparadigmes
• Scala
• F#
• Rust
• JavaScript 2015
• Elixir
Fonctionnels (presque) purs
• Clojure
• ELM
13Linkvalue | Why FP matters ?
Quelles technos ?
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
14Linkvalue | Why FP matters ?
Pour qui ?
Acteurs et domaines d’application
• Banque, assurances : Axa, April, …
• Réseaux sociaux : Twitter, LinkedIn, Facebook, WhatsApp, Instagram, …
• Streaming : Soundcloud, Spotify, Deezer
• Data storage : Dropbox
15Linkvalue | Why FP matters ?
16
W hy 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
Functions Everywhere
FunctionClosure
Memoïsation Function Composition
A D T
A l g e b r a i c D a t a Ty p e sC a l l m e M a y b e
Tr a i t e r l e s e r r e u r s
17Linkvalue | Functions Everywhere
Préambule : coder en scala
18Linkvalue | Functions Everywhere
TP : afficher une liste d’utilisateurs
19Linkvalue | Functions Everywhere
TP : afficher une liste d’utilisateursImpératif – Orienté Objet
20Linkvalue | Functions Everywhere
Function as First Class citizen
21Linkvalue | Functions Everywhere
Function as First Class citizen
Multiparadigme – Approche fonctionnelle
22Linkvalue | Functions Everywhere
Function as First Class citizen
Multiparadigme – Approche fonctionnelle
23Linkvalue | Functions Everywhere
TP : Filtrer les utilisateurs en fonction de la conf
24Linkvalue | Functions Everywhere
TP : Filtrer les utilisateurs en fonction de la conf
25Linkvalue | Functions Everywhere
Closure
Principes
• Fonction qui peut accéder aux variables du scope
• Permet d’embarquer un contexte
• Initialiser des valeurs depuis une fonction constructeur
26Linkvalue | Functions Everywhere
Memoïsation : implémenter un cache local
27Linkvalue | Functions Everywhere
Memoïsation : implémenter un cache local
28Linkvalue | Functions Everywhere
TP : rationaliser l’affichage des infos MeetupGuest
29Linkvalue | Functions Everywhere
TP : rationaliser l’affichage des infos MeetupGuest
30Linkvalue | Functions Everywhere
TP : rationaliser l’affichage des infos MeetupGuest
31Linkvalue | Functions Everywhere
Function composition
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
32Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
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
33Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
Il nous faut :
• Enrichir les fonctions de sélection d’une donnée
34Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage
Il nous faut :
• Enrichir les fonctions de sélection d’une donnée
• Préparer les appels de fonctions avec les paramètres à disposition
35Linkvalue | Functions Everywhere
TP : composer nos fonctions d’affichage 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 hy 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
Func t i ons Ev er y wh er e
F u n c t i o nC 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
ADTAlgebraic Data Types
Call me MaybeTraiter les erreurs
37Linkvalue | Algebraic Data Types
Monoïd ! Monad ! Functor !
38Linkvalue | Algebraic Data Types
Algebraic Data Types
Présentation
• Structures de données
• exposent une api d’applications : transformations, morphismes, …
• Conteneurs : List, Int, String…
• ≠ Objet
• Théorie des catégories
39Linkvalue | Algebraic Data Types
En pratique
40Linkvalue | Algebraic Data Types
TP : Afficher les infos des amis
41Linkvalue | Algebraic Data Types
Gérer les erreurs
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 …
42Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
43Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
44Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
45Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
46Linkvalue | Algebraic Data Types
Gérer les erreurs – Option Type
47Linkvalue | Algebraic Data Types
Gérer les erreurs
La liberté c’est de choisir, et choisir c’est renoncer : Le type Either
48Linkvalue | Algebraic Data Types
Traiter les erreurs : Either Type
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
49Linkvalue | Pour conclure…
Pour conclure
50Linkvalue | Pour conclure…
Pour conclure
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
51Linkvalue | Merci !
Merci !
52Linkvalue | Références
RéférencesLearn
• 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 TELEPHONEADRESSERaphaël Bacconnier| Partner Tech
06 61 32 19 97
01 45 22 30 27
5 rue de la ruche, 69003, Lyon
Linkvalue | Nom de la partie
108 rue des Dames, 75017,
Paris