+ All Categories
Home > Technology > Introduction à la programmation fonctionnelle

Introduction à la programmation fonctionnelle

Date post: 13-Apr-2017
Category:
Upload: marine-karam
View: 248 times
Download: 0 times
Share this document with a friend
53
Committed to innovate LINKVALUE
Transcript

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

Funct ions 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 TELEPHONE ADRESSE

[email protected] 01 45 22 30 27 5 rue de la ruche, 69003, Lyon

Linkvalue | Contact 53

108 rue des Dames, 75017, Paris


Recommended