SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
LaLa
programmationprogrammation
fonctionnellefonctionnelle
en 20 minutesen 20 minutes
Jean DetoeufJean Detoeuf
Développeur
Passionné de nouvelles technologies
#jvm #docker #craftmanship #rpi #diy
ButBut
plus concis
plus simple
plus expressif
Pour faire simplePour faire simple
Concerne l'utilisation deConcerne l'utilisation de
fonctions !fonctions !
Code impératifCode impératif
Description duDescription du commentcomment mais pasmais pas
forcément duforcément du quoiquoi
Changements d'étatsChangements d'états
Code fonctionnelCode fonctionnel
Plus déclaratifPlus déclaratif
Evite les changements d'états →Evite les changements d'états →
thread-safethread-safe
Plus simple à comprendre pour unPlus simple à comprendre pour un
débutantdébutant
John von NeumannJohn von Neumann
Mémoire
Entrée Sortie
Accumulateur
Unité de
contrôle
Unité
arithmétique
et logique
Machine à étatMachine à état
Ordinateurs encore basés sur cetteOrdinateurs encore basés sur cette
architecturearchitecture
Langage impératif en découleLangage impératif en découle
Exemples de langagesExemples de langages
fonctionnelsfonctionnels
ImmutabilitéImmutabilité
Mutabilité ?Mutabilité ?
Mutabilité !Mutabilité !
En dev, c'est plus çaEn dev, c'est plus ça
Fonction mathématiqueFonction mathématique
Soit
carré(x) → x * xcarré(x) → x * x
On a
carré(3) = 9carré(3) = 9
Fonction pureFonction pure
Les paramètres ne sont pas modifiésLes paramètres ne sont pas modifiés
function carre(x){
return x * x;
}
carrecarre estest une fonctionune fonction purepure
function incr(x){
return x++;
}
incrincr n'est pasn'est pas une fonctionune fonction purepure
Toutes les propriétés etToutes les propriétés et
bénéfices de la programmationbénéfices de la programmation
fonctionnelle sont dérivées defonctionnelle sont dérivées de
l'absence d'effets secondairesl'absence d'effets secondaires
lors de l'application d'unelors de l'application d'une
fonctionfonction
Fonctions d'ordre supérieurFonctions d'ordre supérieur
Fonctions qui prennent d'autres fonctionsFonctions qui prennent d'autres fonctions
en paramètreen paramètre
mult(x,y) → x * ymult(x,y) → x * y
paire(f,x) → f(x,x)paire(f,x) → f(x,x)
carre(x) → paire(mult,x)carre(x) → paire(mult,x)
Fonctions qui retourne une fonctionFonctions qui retourne une fonction
puissance(n) → x → x ^ npuissance(n) → x → x ^ n
JavaScriptJavaScript
CallbacksCallbacks
// Simple GET request example:
$http({
method: 'GET',
url: '/someUrl'
}).then(function successCallback(response) {
// this callback will be called asynchronously
// when the response is available
}, function errorCallback(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
Permet d'exprimer un comportementPermet d'exprimer un comportement
ImmutabilitéImmutabilité
Les fonctions passées en paramètresLes fonctions passées en paramètres
doivent être puresdoivent être pures
ScalaScala
Langage basé sur la JVMLangage basé sur la JVM
FonctionnelFonctionnel etet ObjetObjet
Fortement typéFortement typé
Inférence de typeInférence de type
Types de définitionTypes de définition
var variable (mutable)
val valeur (immutable)
def définition de fonction
Immutabilité fait partie du langageImmutabilité fait partie du langage
ExempleExemple
Fonction en paramètreFonction en paramètre
def mult(a: Long, b: Long): Long = a * b
def paire(f: (Long, Long) => Long, x: Long) = f(x, x)
def carre(x: Long) = paire(mult, x)
ExempleExemple
Fonction en retourFonction en retour
def puissance(x:Long) = (y:Long) => Math.pow(y,x)
def carre2(x: Long) = puissance(2)(x)
def carre3 = puissance(2)
DemoDemo
Eviter les "if" dans le codeEviter les "if" dans le code
Remplacer par du polymorphismeRemplacer par du polymorphisme
Limiter les états intermédiairesLimiter les états intermédiaires
Pattern matchingPattern matching
def titre(x: Any): String = x match {
case 1 => "un"
case "Jean" => "Juan"
case Personne(nom, age) => s"Monsieur ${nom} agé de ${age} ans"
case nom: String => nom
case _ => ""
}
DemoDemo
One more thingOne more thing
www.scala.iowww.scala.io
LyonLyon
27 et 28 octobre 201627 et 28 octobre 2016
Early birds encore disponibles !Early birds encore disponibles !
Questions ?Questions ?
Merci pour votre écouteMerci pour votre écoute
Cette présentation :
@thebignet
thebignet
thebignet
talk-functional-prog

Contenu connexe

Tendances

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
DotNetHub
 

Tendances (20)

Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
 
Chap1: Cours en C++
Chap1: Cours en C++Chap1: Cours en C++
Chap1: Cours en C++
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage C
 
Javascript pour les Développeurs WEB
Javascript pour les Développeurs WEBJavascript pour les Développeurs WEB
Javascript pour les Développeurs WEB
 
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
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de base
 
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
 
Polymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraitePolymorphisme, interface et classe abstraite
Polymorphisme, interface et classe abstraite
 
Polymorphisme
PolymorphismePolymorphisme
Polymorphisme
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
POO en C++: Les fonctions
POO en C++: Les fonctionsPOO en C++: Les fonctions
POO en C++: Les fonctions
 
Chap3 programmation modulaire en python
Chap3 programmation modulaire en pythonChap3 programmation modulaire en python
Chap3 programmation modulaire en python
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
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
 
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++
 
Chap 6 : classes et interfaces
Chap 6 : classes et interfacesChap 6 : classes et interfaces
Chap 6 : classes et interfaces
 

En vedette

Big Data - Open Coffee Brest - 20121121
Big Data - Open Coffee Brest - 20121121Big Data - Open Coffee Brest - 20121121
Big Data - Open Coffee Brest - 20121121
Mathias Herberts
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
badr zaimi
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 si
Narûtö Bàl'Sèm
 
exercices-corriges-dalgorithmique
exercices-corriges-dalgorithmiqueexercices-corriges-dalgorithmique
exercices-corriges-dalgorithmique
fast xp
 

En vedette (20)

Programmation Fonctionnelle
Programmation FonctionnelleProgrammation Fonctionnelle
Programmation Fonctionnelle
 
No more (unsecure) secrets, Marty
No more (unsecure) secrets, MartyNo more (unsecure) secrets, Marty
No more (unsecure) secrets, Marty
 
Big Data - Open Coffee Brest - 20121121
Big Data - Open Coffee Brest - 20121121Big Data - Open Coffee Brest - 20121121
Big Data - Open Coffee Brest - 20121121
 
This is not your father's monitoring.
This is not your father's monitoring.This is not your father's monitoring.
This is not your father's monitoring.
 
Artimon - Apache Flume (incubating) NYC Meetup 20111108
Artimon - Apache Flume (incubating) NYC Meetup 20111108Artimon - Apache Flume (incubating) NYC Meetup 20111108
Artimon - Apache Flume (incubating) NYC Meetup 20111108
 
The Hadoop Ecosystem
The Hadoop EcosystemThe Hadoop Ecosystem
The Hadoop Ecosystem
 
Audacity
AudacityAudacity
Audacity
 
Cours algorithme
Cours algorithmeCours algorithme
Cours algorithme
 
IoT Silicon Valley - Cityzen Sciences and Cityzen Data presentation
IoT Silicon Valley - Cityzen Sciences and Cityzen Data presentationIoT Silicon Valley - Cityzen Sciences and Cityzen Data presentation
IoT Silicon Valley - Cityzen Sciences and Cityzen Data presentation
 
Warp 10 Platform Presentation - Criteo Beer & Tech 2016-02-03
Warp 10 Platform Presentation - Criteo Beer & Tech 2016-02-03Warp 10 Platform Presentation - Criteo Beer & Tech 2016-02-03
Warp 10 Platform Presentation - Criteo Beer & Tech 2016-02-03
 
Arthrose et arthrite
Arthrose et arthriteArthrose et arthrite
Arthrose et arthrite
 
Electricité
ElectricitéElectricité
Electricité
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 si
 
Correction
CorrectionCorrection
Correction
 
The Lambda Calculus and The JavaScript
The Lambda Calculus and The JavaScriptThe Lambda Calculus and The JavaScript
The Lambda Calculus and The JavaScript
 
Programmation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScriptProgrammation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScript
 
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
 
exercices-corriges-dalgorithmique
exercices-corriges-dalgorithmiqueexercices-corriges-dalgorithmique
exercices-corriges-dalgorithmique
 
Serie2
Serie2Serie2
Serie2
 

Similaire à Programmation fonctionnelle

Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
cyrilgandon
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
guest6e3bed
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
JS Bournival
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté Objet
Mohammed Jaafar
 

Similaire à Programmation fonctionnelle (20)

Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
 
Formation java script
Formation java scriptFormation java script
Formation java script
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Lambda expression unit 1
Lambda expression unit 1Lambda expression unit 1
Lambda expression unit 1
 
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
 
Introduction java
Introduction javaIntroduction java
Introduction java
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6
 
Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement Backday xebia - Chercher la performance efficacement
Backday xebia - Chercher la performance efficacement
 
DevOps illustré : la jungle de la configuration d'une application
DevOps illustré : la jungle de la configuration d'une applicationDevOps illustré : la jungle de la configuration d'une application
DevOps illustré : la jungle de la configuration d'une application
 
Présentation symfony drupal
Présentation symfony drupalPrésentation symfony drupal
Présentation symfony drupal
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
PHP 7 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
La Tooling API, est-ce pour moi ? Bien sûr, viens voir pourquoi !
 
Introduction à Play Framework 2
Introduction à Play Framework 2Introduction à Play Framework 2
Introduction à Play Framework 2
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté Objet
 
Eléments du langage Java.pdf
Eléments du langage  Java.pdfEléments du langage  Java.pdf
Eléments du langage Java.pdf
 

Programmation fonctionnelle