Date post: | 13-Apr-2017 |
Category: |
Technology |
Upload: | marine-karam |
View: | 248 times |
Download: | 0 times |
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” ?
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
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
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
TP : afficher une liste d’utilisateurs
19
Impératif – Orienté Objet
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
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
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
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
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
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
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 | 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