53
Committed to innovate LINKVALUE

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

Embed Size (px)

Citation preview

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

Committed to innovateLINKVALUE

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

Ce qui compteC’est les valeurs !

Introduction à la programmation fonctionnelle

Page 3: Ce qui compte c'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

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

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

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

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 ?

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

6Linkvalue | Why FP matters ?

Vous avez dit “fonctionnelle” ?

Page 7: Ce qui compte c'est les valeurs ! Introduction à la programmation 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

!

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

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

• …

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

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)

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

10Linkvalue | Why FP matters ?

Sortir du laboratoire

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

11Linkvalue | Why FP matters ?

Sortir du laboratoire

Langages impératifs modernes exposent des API fonctionnelles

• Java 8

• C#

• PHP

• Python

• Swift

• Ruby

• …

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

12Linkvalue | Why FP matters ?

De nouveaux langages

Langages multiparadigmes

• Scala

• F#

• Rust

• JavaScript 2015

• Elixir

Fonctionnels (presque) purs

• Clojure

• ELM

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

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

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

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

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

15Linkvalue | Why FP matters ?

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

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

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

17Linkvalue | Functions Everywhere

Préambule : coder en scala

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

18Linkvalue | Functions Everywhere

TP : afficher une liste d’utilisateurs

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

19Linkvalue | Functions Everywhere

TP : afficher une liste d’utilisateursImpératif – Orienté Objet

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

20Linkvalue | Functions Everywhere

Function as First Class citizen

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

21Linkvalue | Functions Everywhere

Function as First Class citizen

Multiparadigme – Approche fonctionnelle

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

22Linkvalue | Functions Everywhere

Function as First Class citizen

Multiparadigme – Approche fonctionnelle

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

23Linkvalue | Functions Everywhere

TP : Filtrer les utilisateurs en fonction de la conf

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

24Linkvalue | Functions Everywhere

TP : Filtrer les utilisateurs en fonction de la conf

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

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

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

26Linkvalue | Functions Everywhere

Memoïsation : implémenter un cache local

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

27Linkvalue | Functions Everywhere

Memoïsation : implémenter un cache local

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

28Linkvalue | Functions Everywhere

TP : rationaliser l’affichage des infos MeetupGuest

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

29Linkvalue | Functions Everywhere

TP : rationaliser l’affichage des infos MeetupGuest

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

30Linkvalue | Functions Everywhere

TP : rationaliser l’affichage des infos MeetupGuest

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

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

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

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

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

33Linkvalue | Functions Everywhere

TP : composer nos fonctions d’affichage

Il nous faut :

• Enrichir les fonctions de sélection d’une donnée

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

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

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

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

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

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

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

37Linkvalue | Algebraic Data Types

Monoïd ! Monad ! Functor !

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

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

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

39Linkvalue | Algebraic Data Types

En pratique

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

40Linkvalue | Algebraic Data Types

TP : Afficher les infos des amis

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

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 …

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

42Linkvalue | Algebraic Data Types

Gérer les erreurs – Option Type

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

43Linkvalue | Algebraic Data Types

Gérer les erreurs – Option Type

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

44Linkvalue | Algebraic Data Types

Gérer les erreurs – Option Type

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

45Linkvalue | Algebraic Data Types

Gérer les erreurs – Option Type

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

46Linkvalue | Algebraic Data Types

Gérer les erreurs – Option Type

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

47Linkvalue | Algebraic Data Types

Gérer les erreurs

La liberté c’est de choisir, et choisir c’est renoncer : Le type Either

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

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

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

49Linkvalue | Pour conclure…

Pour conclure

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

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

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

51Linkvalue | Merci !

Merci !

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

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

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

53

www.linkvalue.fr

NOUS CONTACTER

MAIL TELEPHONEADRESSERaphaël Bacconnier| Partner Tech

[email protected]

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