Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Programmation fonctionnelle

284 views

Published on

Introduction à la programmation fonctionnelle

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Programmation fonctionnelle

  1. 1. LaLa programmationprogrammation fonctionnellefonctionnelle en 20 minutesen 20 minutes
  2. 2. Jean DetoeufJean Detoeuf Développeur Passionné de nouvelles technologies #jvm #docker #craftmanship #rpi #diy
  3. 3. ButBut plus concis plus simple plus expressif
  4. 4. Pour faire simplePour faire simple Concerne l'utilisation deConcerne l'utilisation de fonctions !fonctions !
  5. 5. Code impératifCode impératif Description duDescription du commentcomment mais pasmais pas forcément duforcément du quoiquoi Changements d'étatsChangements d'états
  6. 6. 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
  7. 7. 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
  8. 8. Exemples de langagesExemples de langages fonctionnelsfonctionnels
  9. 9. ImmutabilitéImmutabilité
  10. 10. Mutabilité ?Mutabilité ?
  11. 11. Mutabilité !Mutabilité ! En dev, c'est plus çaEn dev, c'est plus ça
  12. 12. Fonction mathématiqueFonction mathématique Soit carré(x) → x * xcarré(x) → x * x On a carré(3) = 9carré(3) = 9
  13. 13. 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
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. ImmutabilitéImmutabilité Les fonctions passées en paramètresLes fonctions passées en paramètres doivent être puresdoivent être pures
  18. 18. ScalaScala Langage basé sur la JVMLangage basé sur la JVM FonctionnelFonctionnel etet ObjetObjet Fortement typéFortement typé Inférence de typeInférence de type
  19. 19. 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
  20. 20. 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)
  21. 21. 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)
  22. 22. DemoDemo
  23. 23. 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
  24. 24. 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 _ => "" }
  25. 25. DemoDemo
  26. 26. One more thingOne more thing
  27. 27. www.scala.iowww.scala.io LyonLyon 27 et 28 octobre 201627 et 28 octobre 2016 Early birds encore disponibles !Early birds encore disponibles !
  28. 28. Questions ?Questions ?
  29. 29. Merci pour votre écouteMerci pour votre écoute Cette présentation : @thebignet thebignet thebignet talk-functional-prog

×