SlideShare ist ein Scribd-Unternehmen logo
1 von 53
Downloaden Sie, um offline zu lesen
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	
Functions
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 TELEPHONEADRESSE
contact@link-value.fr 01 45 22 30 275 rue de la ruche, 69003, Lyon
Linkvalue | Contact
53	
108 rue des Dames, 75017, Paris

Weitere ähnliche Inhalte

Was ist angesagt?

PHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautésPHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautésDidcode
 
Javascript demystified
Javascript demystifiedJavascript demystified
Javascript demystifiedDavid Bo
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage PythonAziz Darouichi
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEBAbbes Rharrab
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Aziz Darouichi
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateursAziz Darouichi
 
Refined, des types sur mesure
Refined, des types sur mesureRefined, des types sur mesure
Refined, des types sur mesureMohamad Kassir
 
Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Amina HAMEURLAINE
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaAziz Darouichi
 
Présentation ppt
Présentation pptPrésentation ppt
Présentation pptBoudhir
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5julien pauli
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3Eddy RICHARD
 

Was ist angesagt? (20)

PHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautésPHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautés
 
Javascript demystified
Javascript demystifiedJavascript demystified
Javascript demystified
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Nouveautés php 7
Nouveautés php 7Nouveautés php 7
Nouveautés php 7
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
POO en C++: Les fonctions
POO en C++: Les fonctionsPOO en C++: Les fonctions
POO en C++: Les fonctions
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
Refined, des types sur mesure
Refined, des types sur mesureRefined, des types sur mesure
Refined, des types sur mesure
 
Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++Cours Programmation Orientée Objet en C++
Cours Programmation Orientée Objet en C++
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
Chapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en JavaChapitre 11: Expression Lambda et Référence de méthode en Java
Chapitre 11: Expression Lambda et Référence de méthode en Java
 
Présentation ppt
Présentation pptPrésentation ppt
Présentation ppt
 
Initiation au langage PHP
Initiation au langage PHPInitiation au langage PHP
Initiation au langage PHP
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 

Andere mochten auch

What Is Language
What Is LanguageWhat Is Language
What Is LanguageOtissia
 
Certificate of Academic Recognition - Outstanding performance in Pascal progr...
Certificate of Academic Recognition - Outstanding performance in Pascal progr...Certificate of Academic Recognition - Outstanding performance in Pascal progr...
Certificate of Academic Recognition - Outstanding performance in Pascal progr...arman o
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithmebadr zaimi
 
Vers des langues de programmation ?
Vers des langues de programmation ?Vers des langues de programmation ?
Vers des langues de programmation ?Nicolas Dubois
 
Programming paradigms c1
Programming paradigms c1Programming paradigms c1
Programming paradigms c1Omar Al-Sabek
 
Les langages de programmation
Les langages de programmationLes langages de programmation
Les langages de programmationPierre Tran
 
Les langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésLes langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésmercury_wood
 
Initiation aux langages informatiques (2)
Initiation aux langages informatiques (2)Initiation aux langages informatiques (2)
Initiation aux langages informatiques (2)Pierre Tran
 
7 étapes pour emmener la programmation dans la salle de classe
7 étapes pour emmener la programmation dans la salle de classe7 étapes pour emmener la programmation dans la salle de classe
7 étapes pour emmener la programmation dans la salle de classeMartine Paquet
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siNarûtö Bàl'Sèm
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)salah fenni
 
Pascal Programming Session 1
Pascal Programming Session 1Pascal Programming Session 1
Pascal Programming Session 1Ashesh R
 
Lect 1. introduction to programming languages
Lect 1. introduction to programming languagesLect 1. introduction to programming languages
Lect 1. introduction to programming languagesVarun Garg
 

Andere mochten auch (20)

Programmation Fonctionnelle
Programmation FonctionnelleProgrammation Fonctionnelle
Programmation Fonctionnelle
 
What Is Language
What Is LanguageWhat Is Language
What Is Language
 
Certificate of Academic Recognition - Outstanding performance in Pascal progr...
Certificate of Academic Recognition - Outstanding performance in Pascal progr...Certificate of Academic Recognition - Outstanding performance in Pascal progr...
Certificate of Academic Recognition - Outstanding performance in Pascal progr...
 
Audacity
AudacityAudacity
Audacity
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
 
Vers des langues de programmation ?
Vers des langues de programmation ?Vers des langues de programmation ?
Vers des langues de programmation ?
 
Programming paradigms c1
Programming paradigms c1Programming paradigms c1
Programming paradigms c1
 
Les langages de programmation
Les langages de programmationLes langages de programmation
Les langages de programmation
 
Les langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésLes langages de programmation sont trop compliqués
Les langages de programmation sont trop compliqués
 
Algorithme
AlgorithmeAlgorithme
Algorithme
 
Arthrose et arthrite
Arthrose et arthriteArthrose et arthrite
Arthrose et arthrite
 
Initiation aux langages informatiques (2)
Initiation aux langages informatiques (2)Initiation aux langages informatiques (2)
Initiation aux langages informatiques (2)
 
Electricité
ElectricitéElectricité
Electricité
 
7 étapes pour emmener la programmation dans la salle de classe
7 étapes pour emmener la programmation dans la salle de classe7 étapes pour emmener la programmation dans la salle de classe
7 étapes pour emmener la programmation dans la salle de classe
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 si
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
 
Correction
CorrectionCorrection
Correction
 
Pascal Programming Session 1
Pascal Programming Session 1Pascal Programming Session 1
Pascal Programming Session 1
 
Pascal programming language
Pascal programming languagePascal programming language
Pascal programming language
 
Lect 1. introduction to programming languages
Lect 1. introduction to programming languagesLect 1. introduction to programming languages
Lect 1. introduction to programming languages
 

Ähnlich wie Introduction à la programmation fonctionnelle

Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelleCe qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelleRaphaël Bacconnier
 
Cas integration open_erp
Cas integration open_erpCas integration open_erp
Cas integration open_erpJoubi Aaziz
 
Apache SPARK ML : principes, concepts et mise en œuvre
Apache SPARK  ML : principes, concepts et  mise en œuvre Apache SPARK  ML : principes, concepts et  mise en œuvre
Apache SPARK ML : principes, concepts et mise en œuvre MICHRAFY MUSTAFA
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?Rui Carvalho
 
14_PM_chapitre3_Modelisation pour modélisation
14_PM_chapitre3_Modelisation pour modélisation14_PM_chapitre3_Modelisation pour modélisation
14_PM_chapitre3_Modelisation pour modélisationGeorges OLE
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFBoubker ABERWAG
 
20070925 05 - Un portail qualimétrie en Open Source
20070925 05 - Un portail qualimétrie en Open Source20070925 05 - Un portail qualimétrie en Open Source
20070925 05 - Un portail qualimétrie en Open SourceLeClubQualiteLogicielle
 
Les critères d’une utilisabilité efficace d’API et comment améliorer cette ut...
Les critères d’une utilisabilité efficace d’API et comment améliorer cette ut...Les critères d’une utilisabilité efficace d’API et comment améliorer cette ut...
Les critères d’une utilisabilité efficace d’API et comment améliorer cette ut...Khaled Fayala
 
Perfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxPerfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxMarc Bojoly
 
Cyproc formation-programmation-en-langage-c
Cyproc formation-programmation-en-langage-cCyproc formation-programmation-en-langage-c
Cyproc formation-programmation-en-langage-cCERTyou Formation
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communautéMickaël Rémond
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelleAssociation Agile Nantes
 
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Yi YANG
 
Migration de Sage ligne 100 vers OpenERP v6
Migration de Sage ligne 100 vers OpenERP v6Migration de Sage ligne 100 vers OpenERP v6
Migration de Sage ligne 100 vers OpenERP v6riyadadva
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Arnaud Auroux
 
Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellgdigugli
 
Langage de Programmation.pdf
Langage de Programmation.pdfLangage de Programmation.pdf
Langage de Programmation.pdfAboubacarDiarra10
 
Construire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAPConstruire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAPClément OUDOT
 

Ähnlich wie Introduction à la programmation fonctionnelle (20)

Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelleCe qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
 
Cas integration open_erp
Cas integration open_erpCas integration open_erp
Cas integration open_erp
 
Apache SPARK ML : principes, concepts et mise en œuvre
Apache SPARK  ML : principes, concepts et  mise en œuvre Apache SPARK  ML : principes, concepts et  mise en œuvre
Apache SPARK ML : principes, concepts et mise en œuvre
 
.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?.Net pour le développeur Java - une source d'inspiration?
.Net pour le développeur Java - une source d'inspiration?
 
14_PM_chapitre3_Modelisation pour modélisation
14_PM_chapitre3_Modelisation pour modélisation14_PM_chapitre3_Modelisation pour modélisation
14_PM_chapitre3_Modelisation pour modélisation
 
Formation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPFFormation d'architecte logiciel AFCEPF
Formation d'architecte logiciel AFCEPF
 
4D Summit2013 refactoring
4D Summit2013 refactoring4D Summit2013 refactoring
4D Summit2013 refactoring
 
20070925 05 - Un portail qualimétrie en Open Source
20070925 05 - Un portail qualimétrie en Open Source20070925 05 - Un portail qualimétrie en Open Source
20070925 05 - Un portail qualimétrie en Open Source
 
Les critères d’une utilisabilité efficace d’API et comment améliorer cette ut...
Les critères d’une utilisabilité efficace d’API et comment améliorer cette ut...Les critères d’une utilisabilité efficace d’API et comment améliorer cette ut...
Les critères d’une utilisabilité efficace d’API et comment améliorer cette ut...
 
Perfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptxPerfug BOF devoxx2017.pptx
Perfug BOF devoxx2017.pptx
 
Cyproc formation-programmation-en-langage-c
Cyproc formation-programmation-en-langage-cCyproc formation-programmation-en-langage-c
Cyproc formation-programmation-en-langage-c
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
 
Algorithme
AlgorithmeAlgorithme
Algorithme
 
Patrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnellePatrons de conception de la programmation fonctionnelle
Patrons de conception de la programmation fonctionnelle
 
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données ! Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
Avec le langage R, prenez de la hauteur dans l’analyse de vos données !
 
Migration de Sage ligne 100 vers OpenERP v6
Migration de Sage ligne 100 vers OpenERP v6Migration de Sage ligne 100 vers OpenERP v6
Migration de Sage ligne 100 vers OpenERP v6
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8
 
Ez18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshellEz18n Annotation Processing Tool in a nutshell
Ez18n Annotation Processing Tool in a nutshell
 
Langage de Programmation.pdf
Langage de Programmation.pdfLangage de Programmation.pdf
Langage de Programmation.pdf
 
Construire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAPConstruire son application web de gestion de contenu d'annuaire LDAP
Construire son application web de gestion de contenu d'annuaire LDAP
 

Introduction à la programmation fonctionnelle

  • 2. Ce qui compte C’est les valeurs ! Introduction à la programmation fonctionnelle
  • 3. 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
  • 4. Why FP matters ? Vous avez dit fonctionnelle ? Des programmes comme suite d’applications Sortir du labo SOMMAIRE Linkvalue | sommaire 4 Functions Everywhere Function Closure Memoïsation Function Composition A D T Algebraic Data Types Call me Maybe Traiter les erreurs
  • 5. 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 ?
  • 6. Linkvalue | Why FP matters ? Vous avez dit “fonctionnelle” ? 6
  • 7. 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 !
  • 8. 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 •  …
  • 9. 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)
  • 10. Linkvalue | Why FP matters ? Sortir du laboratoire 10
  • 11. Linkvalue | Why FP matters ? Sortir du laboratoire 11 Langages impératifs modernes exposent des API fonctionnelles •  Java 8 •  C# •  PHP •  Python •  Swift •  Ruby •  …
  • 12. Linkvalue | Why FP matters ? De nouveaux langages 12 Langages multiparadigmes •  Scala •  F# •  Rust •  JavaScript 2015 •  Elixir Fonctionnels (presque) purs •  Clojure •  ELM
  • 13. 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
  • 14. 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
  • 15. Linkvalue | Why FP matters ? 15
  • 16. 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
  • 17. Linkvalue | Functions Everywhere Préambule : coder en scala 17
  • 18. Linkvalue | Functions Everywhere TP : afficher une liste d’utilisateurs 18
  • 19. Linkvalue | Functions Everywhere TP : afficher une liste d’utilisateurs 19 Impératif – Orienté Objet
  • 20. Linkvalue | Functions Everywhere Function as First Class citizen 20
  • 21. Linkvalue | Functions Everywhere Function as First Class citizen 21 Multiparadigme – Approche fonctionnelle
  • 22. Linkvalue | Functions Everywhere Function as First Class citizen 22 Multiparadigme – Approche fonctionnelle
  • 23. Linkvalue | Functions Everywhere TP : Filtrer les utilisateurs en fonction de la conf 23
  • 24. Linkvalue | Functions Everywhere TP : Filtrer les utilisateurs en fonction de la conf 24
  • 25. 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
  • 26. Linkvalue | Functions Everywhere Memoïsation : implémenter un cache local 26
  • 27. Linkvalue | Functions Everywhere Memoïsation : implémenter un cache local 27
  • 28. Linkvalue | Functions Everywhere TP : rationaliser l’affichage des infos MeetupGuest 28
  • 29. Linkvalue | Functions Everywhere TP : rationaliser l’affichage des infos MeetupGuest 29
  • 30. Linkvalue | Functions Everywhere TP : rationaliser l’affichage des infos MeetupGuest 30
  • 31. 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
  • 32. 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
  • 33. Linkvalue | Functions Everywhere TP : composer nos fonctions d’affichage 33 Il nous faut : •  Enrichir les fonctions de sélection d’une donnée
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. Linkvalue | Algebraic Data Types Monoïd ! Monad ! Functor ! 37
  • 38. 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
  • 39. Linkvalue | Algebraic Data Types En pratique 39
  • 40. Linkvalue | Algebraic Data Types TP : Afficher les infos des amis 40
  • 41. 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 …
  • 42. Linkvalue | Algebraic Data Types Gérer les erreurs – Option Type 42
  • 43. Linkvalue | Algebraic Data Types Gérer les erreurs – Option Type 43
  • 44. Linkvalue | Algebraic Data Types Gérer les erreurs – Option Type 44
  • 45. Linkvalue | Algebraic Data Types Gérer les erreurs – Option Type 45
  • 46. Linkvalue | Algebraic Data Types Gérer les erreurs – Option Type 46
  • 47. Linkvalue | Algebraic Data Types Gérer les erreurs 47 La liberté c’est de choisir, et choisir c’est renoncer : Le type Either
  • 48. 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
  • 49. Linkvalue | Pour conclure… Pour conclure 49
  • 50. 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
  • 51. Linkvalue | Merci ! Merci ! 51
  • 52. 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
  • 53. www.linkvalue.fr NOUS CONTACTER MAIL TELEPHONEADRESSE contact@link-value.fr 01 45 22 30 275 rue de la ruche, 69003, Lyon Linkvalue | Contact 53 108 rue des Dames, 75017, Paris