Programmation fonctionnelle

29
La La programmation programmation fonctionnelle fonctionnelle en 20 minutes en 20 minutes

Transcript of Programmation fonctionnelle

LaLaprogrammationprogrammation

fonctionnellefonctionnelleen 20 minutesen 20 minutes

Jean DetoeufJean Detoeuf

Développeur

Passionné de nouvelles technologies

#jvm #docker #craftmanship #rpi #diy

ButButplus concisplus simpleplus expressif

Pour faire simplePour faire simpleConcerne l'utilisation deConcerne l'utilisation de

fonctions !fonctions !

Code impératifCode impératifDescription du Description du commentcomment mais pas mais pas

forcément du forcément du quoiquoi

Changements d'étatsChangements d'états

Code fonctionnelCode fonctionnelPlus 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 undébutantdébutant

John von NeumannJohn von Neumann

Mémoire

Entrée Sortie

Accumulateur

Unité decontrôle

Unitéarithmétique et logique

Machine à étatMachine à état

Ordinateurs encore basés sur cetteOrdinateurs encore basés sur cettearchitecturearchitecture

Langage impératif en découleLangage impératif en découle

Exemples de langagesExemples de langagesfonctionnelsfonctionnels

ImmutabilitéImmutabilité

Mutabilité ?Mutabilité ?

Mutabilité !Mutabilité !En dev, c'est plus çaEn dev, c'est plus ça

Fonction mathématiqueFonction mathématiqueSoit

carré(x) → x * xcarré(x) → x * xOn a

carré(3) = 9carré(3) = 9

Fonction pureFonction pureLes paramètres ne sont pas modifiésLes paramètres ne sont pas modifiés

function carre(x){return x * x;

}

carre carre estest une fonction une fonction purepurefunction incr(x){

return x++;}

incr incr n'est pasn'est pas une fonction une fonction purepure

Toutes les propriétés etToutes les propriétés etbénéfices de la programmationbénéfices de la programmationfonctionnelle sont dérivées defonctionnelle sont dérivées del'absence d'effets secondairesl'absence d'effets secondaires

lors de l'application d'unelors de l'application d'unefonctionfonction

Fonctions d'ordre supérieurFonctions d'ordre supérieurFonctions qui prennent d'autres fonctionsFonctions qui prennent d'autres fonctions

en paramètreen paramètremult(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 fonctionpuissance(n) → x → x ^ npuissance(n) → x → x ^ n

JavaScriptJavaScriptCallbacksCallbacks

// 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

ScalaScalaLangage basé sur la JVMLangage basé sur la JVM

Fonctionnel Fonctionnel etet Objet Objet

Fortement typéFortement typé

Inférence de typeInférence de type

Types de définitionTypes de définitionvar variable (mutable)val valeur (immutable)def définition de fonction

Immutabilité fait partie du langageImmutabilité fait partie du langage

ExempleExempleFonction en paramètreFonction en paramètre

def mult(a: Long, b: Long): Long = a * bdef paire(f: (Long, Long) => Long, x: Long) = f(x, x)def carre(x: Long) = paire(mult, x)

ExempleExempleFonction 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 matchingdef 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 => nomcase _ => ""

}

DemoDemo

One more thingOne more thing

www.scala.iowww.scala.ioLyonLyon

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 :

@thebignetthebignetthebignet

talk-functional-prog