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

Programmation fonctionnelle