Upgrade to Pro — share decks privately, control downloads, hide ads and more …

La programmation fonctionnelle

La programmation fonctionnelle

E0c9f21b6abfb645c2ab31445a3cf2a9?s=128

Sandrine Banas

December 09, 2020
Tweet

Transcript

  1. 7e édition

  2. La programmation fonctionnelle Sandrine Banas

  3. © 2020 CGI Inc. Interne Interne Intérêt ? • Adaptée

    aux problématiques de l’époque: concurrence, performance, gros systèmes multi- états, Big data... • Plusieurs façons de penser valent mieux qu’une. • Code plus court et concis, facile à comprendre et tester avec moins de bugs et souvent fun. • Effet ouaouh sur les autres 3
  4. © 2020 CGI Inc. Interne La programmation fonctionnelle Premier langage

    fonctionnel LISP 1958 Java 8 – 2014 Aws Lambda - 2014 React - 2017 4
  5. © 2020 CGI Inc. Interne Principes de la programmation fonctionnelle

  6. © 2020 CGI Inc. Interne Les paradigmes de programmation

  7. © 2020 CGI Inc. Interne Interne • Programmation impérative (comment)

    • Opérations en séquences d’instructions modifiant l’état du programme • Encapsulation • Programmation déclarative (quoi) • Composant logiciels (fonctions) indépendants du contexte et ne comportant aucun état interne. • Transparence référentielle 7 Paradigmes de programmation
  8. © 2020 CGI Inc. Interne Interne Changement de paradigme en

    cours… 8
  9. © 2020 CGI Inc. Interne Interne Syntaxe Javascript function myFunction(input1,

    input2) { return input1 + input2; } (input1, input2) => { //instructions return input1 + input2;} (input1, input2) => input1 + input2 9
  10. © 2020 CGI Inc. Interne Interne Syntaxe Java BiFunction<Integer, Integer,

    Integer> myFunction = new BiFunction<Integer, Integer, Integer>() { @Override public Integer apply(Integer input1, Integer input2) { return input1 + input2; }}; (input1, input2) -> { //instructions return input1 + input2;} (input1, input2) -> input1 + input2 10
  11. © 2020 CGI Inc. Interne Interne • Associée à un

    objet ou une classe et peut accéder à son état interne et le modifier • Programmation orientée objet • monPanier.ajouter(montant) • Mathématique => f(x) = 2x • Indépendante, n’accède qu’aux paramètres en entrée • Programmation fonctionnelle • (montant1, montant2) -> montant1 + montant2 11 Une méthode n’est pas une fonction (et vice versa).
  12. © 2020 CGI Inc. Interne Programmation fonctionnelle 3 Principes 12

  13. © 2020 CGI Inc. Interne Fonction pure Transparence référentielle 13

  14. © 2020 CGI Inc. Interne Fonction pure 14

  15. © 2020 CGI Inc. Interne Fonction pure Absence d’effets de

    bord 15
  16. © 2020 CGI Inc. Interne Fonction pure Single Responsability Principle

    16
  17. © 2020 CGI Inc. Interne Interne Fonction PURE • Transparence

    référentielle = Pour un même input, l’output ne changera pas. • Pas d’effets de bord • Single Responsability Principle • Ex Math.sqrt(value) Fonction IMPURE • Fonctions void, sans input et/ou output • Effets de bord • Plusieurs responsabilités Ex Math.random(); 17
  18. © 2020 CGI Inc. Interne Techniques de la programmation fonctionnelle

  19. © 2020 CGI Inc. Interne Interne Citoyens de première classe

    Assignable à une variable Retournée par une méthode Passée en paramètre 19
  20. © 2020 CGI Inc. Interne Interne Les fonctions d’ordre supérieures

    Prend une ou plusieurs fonctions comme input et/ou retourne une fonction comme output 20
  21. © 2020 CGI Inc. Interne Interne Les fonctions d’ordre supérieures

    pour le contrôle de flux 21
  22. © 2020 CGI Inc. Interne Interne Curryfication • Haskell Curry

    • Transformer une fonction en plusieurs arguments en une fonction à un seul argument qui retourne une fonction sur le reste des argument. • Simplifier, augmenter le niveau d’abstraction, créer des fonctions pures • Application partielle des paramètres 22
  23. © 2020 CGI Inc. Interne Interne Gestion des erreurs •

    Exceptions non prévisibles exemple erreur mémoire => effet de bord • Exceptions prévisibles ex parse Integer • L’erreur doit être retournée et non envoyée. 23
  24. © 2020 CGI Inc. Interne Interne Gestion des erreurs Try

    containeur d’une computation qui peut se terminer en exception. Peut se terminer en failure ou success Either => Left pour l’erreur, Right pour le succès 24
  25. © 2020 CGI Inc. Interne Conclusion

  26. © 2020 CGI Inc. Interne Interne INCONVENIENTS Problème de lisibilité

    si mauvaise utilisation Pas adaptée à tous les cas 26
  27. © 2020 CGI Inc. Interne Avantages Petites fonctions réutilisables Tests

    unitaires faciles à mettre en place
  28. © 2020 CGI Inc. Interne Avantages Immutablité Moins de risques

    de bug Thread safe / Concurrence
  29. © 2020 CGI Inc. Interne Avantages Performance Mémoïsation Parallélisation

  30. © 2020 CGI Inc. Interne Merci 30

  31. © 2020 CGI Inc. Interne © 2020 CGI Inc. Communiquez

    avec nous pour poursuivre la conversation ! Banas Expert technique senior Sandrine.banas@cgi.com https://www.linkedin.com/in/sandrine-banas-60498aa8/ @cosjava