SlideShare une entreprise Scribd logo
1  sur  28
LAMBDA EXPRESSION
P R O G R A M M AT I O N F O N C T I O N N E L L E E N J AVA 8
Z A I D B O U D A M O U Z
@ B D Z Z A I D
UNIT 1 : LAMBDA
EXPRESSION
UNIT 2 : FUNCTIONAL
PROGRAMMING
UNIT 3 : JAVA STREAMS
CODE
CLEAN
FUNCTIONAL
PROGRAM
-MING
STEAM
MULTICORE JAVA 8
UNE RÉVOLUTION
DATE, API, …
CONCURRENCE
Préchauffer le four
+
Préparer la pâte
En même temps
SCALABILITÉ
Tout le monde se sert
en même temps
EFFET DE BORD
Changer la température du
four
PROGRAMMATION FONCTIONNELLE ?
calcul en tant qu'évaluation
de fonctions mathématiques
Toujours les même paramètres
Toujours le même résultat
IMMUABLE
Une fonction ne doit jamais changer son environnement
PROGRAMMATION FONCTIONNELLE ?
PASSER UNE INSTRUCTION (BEHAVIOR)
EN PARAMETRE D’UNE METHODE
OBJECT
WITH
METHOD
AS
PARAM
N O N
AVONS-NOUS VRAIMENT
BESOIN DE LA
PROGRAMMATION
FONCTIONNELLE ?
• On peut faire l’équivalent en
programmation objet, c’est
le principe du
polymorphisme.
C E P E N DA N T
• La fonction à exécuter est
forcément dans une
méthode d’une classe.
UNIT 1:
LAMBDA
EXPRESSION
1 ) F U N C T I O N A S A VA L U E
2 ) D E C L A R AT I O N T Y P E
3 ) E X E R C I C E 1
FUNCTION AS A VALUE
INLINE VALUE
FUNCTION AS A VALUE
FUNCTION AS A VALUE
NOM DE LA FONCTION REDONDANT
printSomething
FUNCTION AS A VALUE
printSomething
PORTEE DE LA FONCTION INUTILE ( public /
protected / private)
public
FUNCTION AS A VALUE
D O U B L E
QUELLE EST LE TYPE DE RETOUR
DE CETTE FONCTION ? • Un développeur sait
déterminer le type de retour
en lisant le code.
• La JVM aussi.
N O N
• A la compilation il est
possible de déterminer le
retour d’une méthode.
EST-CE QUE CE BOUT DE CODE
COMPILE EN JAVA 1.4 ?
FUNCTION AS A VALUE
printSomething
public
INFERENCE DE TYPE : La JVM sait déterminer le
type à partir du traitement à exécuter entre les
accollades.
void
FUNCTION AS A VALUE
printSomething
public
void
Une seule exigence de la JVM pour comprendre
que la déclaration est un expression LAMBDA :
() -> { … } ;
FUNCTION AS A VALUE
printSomething
public
void
Une seule exigence de la JVM pour comprendre
que la déclaration est un expression LAMBDA :
() -> { … } ;
FUNCTION AS A VALUE
printSomething
public
void
() -> { … } ;
Simplification possible si le traitement s’écrit en une
ligne :
FUNCTION AS A VALUE
Autre simplification possible :
1 INSTRUCTION D’UNE LIGNE = PAS BESOIN DU
MOT CLE return
FUNCTION AS A VALUE
FUNCTION AS A VALUE
Exemples disponibles en ligne
https://github.com/bdzzaid/lunch-n-learn-lambda/blob/master/site/write-lambda.md
DECLARATION TYPE
DECLARATION TYPE
DECLARATION TYPE
DECLARATION TYPE
DECLARATION TYPE
EXERCICE : JAVA TO LAMBDA
EXERCICE : FUNCTIONAL
PROGRAMMING

Contenu connexe

Similaire à Lambda expression unit 1

Introduction java
Introduction javaIntroduction java
Introduction javaFouad Root
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA Asmaa BENGUEDDACH
 
Les fonctions.pptx
Les fonctions.pptxLes fonctions.pptx
Les fonctions.pptxsouadsadki2
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Jean-Baptiste Vigneron
 
Formation java script
Formation java scriptFormation java script
Formation java scriptRomdhani Asma
 
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 !Paris Salesforce Developer Group
 
03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdfAhmed12314
 
cours fortran.pptx
cours fortran.pptxcours fortran.pptx
cours fortran.pptxMED B
 
ALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxHathat10
 
Introduction à la programmation fonctionnelle
Introduction à la programmation fonctionnelle Introduction à la programmation fonctionnelle
Introduction à la programmation fonctionnelle Marine Karam
 
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...sametmax
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture zaghir
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logiciellecyrilgandon
 
Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelleCe qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelleRaphaël Bacconnier
 

Similaire à Lambda expression unit 1 (20)

Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Introduction java
Introduction javaIntroduction java
Introduction java
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
 
Les fonctions.pptx
Les fonctions.pptxLes fonctions.pptx
Les fonctions.pptx
 
Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6Une introduction à Javascript et ECMAScript 6
Une introduction à Javascript et ECMAScript 6
 
Formation java script
Formation java scriptFormation java script
Formation java script
 
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 !
 
03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf
 
Algorithmique iv
Algorithmique ivAlgorithmique iv
Algorithmique iv
 
Generalites
GeneralitesGeneralites
Generalites
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
cours fortran.pptx
cours fortran.pptxcours fortran.pptx
cours fortran.pptx
 
ALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptx
 
Introduction à la programmation fonctionnelle
Introduction à la programmation fonctionnelle Introduction à la programmation fonctionnelle
Introduction à la programmation fonctionnelle
 
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
 
Formation VBA Excel
Formation VBA ExcelFormation VBA Excel
Formation VBA Excel
 
sfPot aop
sfPot aopsfPot aop
sfPot aop
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelleCe qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
Ce qui compte c'est les valeurs ! Introduction à la programmation fonctionnelle
 

Lambda expression unit 1

  • 1. LAMBDA EXPRESSION P R O G R A M M AT I O N F O N C T I O N N E L L E E N J AVA 8
  • 2. Z A I D B O U D A M O U Z @ B D Z Z A I D UNIT 1 : LAMBDA EXPRESSION UNIT 2 : FUNCTIONAL PROGRAMMING UNIT 3 : JAVA STREAMS
  • 4. CONCURRENCE Préchauffer le four + Préparer la pâte En même temps SCALABILITÉ Tout le monde se sert en même temps EFFET DE BORD Changer la température du four
  • 5. PROGRAMMATION FONCTIONNELLE ? calcul en tant qu'évaluation de fonctions mathématiques Toujours les même paramètres Toujours le même résultat IMMUABLE Une fonction ne doit jamais changer son environnement
  • 6. PROGRAMMATION FONCTIONNELLE ? PASSER UNE INSTRUCTION (BEHAVIOR) EN PARAMETRE D’UNE METHODE OBJECT WITH METHOD AS PARAM
  • 7. N O N AVONS-NOUS VRAIMENT BESOIN DE LA PROGRAMMATION FONCTIONNELLE ? • On peut faire l’équivalent en programmation objet, c’est le principe du polymorphisme. C E P E N DA N T • La fonction à exécuter est forcément dans une méthode d’une classe.
  • 8. UNIT 1: LAMBDA EXPRESSION 1 ) F U N C T I O N A S A VA L U E 2 ) D E C L A R AT I O N T Y P E 3 ) E X E R C I C E 1
  • 9. FUNCTION AS A VALUE INLINE VALUE FUNCTION AS A VALUE
  • 10. FUNCTION AS A VALUE NOM DE LA FONCTION REDONDANT printSomething
  • 11. FUNCTION AS A VALUE printSomething PORTEE DE LA FONCTION INUTILE ( public / protected / private) public
  • 12. FUNCTION AS A VALUE
  • 13. D O U B L E QUELLE EST LE TYPE DE RETOUR DE CETTE FONCTION ? • Un développeur sait déterminer le type de retour en lisant le code. • La JVM aussi. N O N • A la compilation il est possible de déterminer le retour d’une méthode. EST-CE QUE CE BOUT DE CODE COMPILE EN JAVA 1.4 ?
  • 14. FUNCTION AS A VALUE printSomething public INFERENCE DE TYPE : La JVM sait déterminer le type à partir du traitement à exécuter entre les accollades. void
  • 15. FUNCTION AS A VALUE printSomething public void Une seule exigence de la JVM pour comprendre que la déclaration est un expression LAMBDA : () -> { … } ;
  • 16. FUNCTION AS A VALUE printSomething public void Une seule exigence de la JVM pour comprendre que la déclaration est un expression LAMBDA : () -> { … } ;
  • 17. FUNCTION AS A VALUE printSomething public void () -> { … } ; Simplification possible si le traitement s’écrit en une ligne :
  • 18. FUNCTION AS A VALUE Autre simplification possible : 1 INSTRUCTION D’UNE LIGNE = PAS BESOIN DU MOT CLE return
  • 19. FUNCTION AS A VALUE
  • 20. FUNCTION AS A VALUE Exemples disponibles en ligne https://github.com/bdzzaid/lunch-n-learn-lambda/blob/master/site/write-lambda.md
  • 26.
  • 27. EXERCICE : JAVA TO LAMBDA

Notes de l'éditeur

  1. FOCUS SUR LE LAMBDA LANGAGE REQUIS : Vous êtes un développeur Vous êtes familier à la programmation objet (et à la programmation JAVA) Qui connait la programmation fonctionnelle ? Qui en a déjà pratiquer ?
  2. Aujourd’hui : UNIT 1 : Lambda expression Vous me connaissez en tant que collègue, vous pouvez me suivre
  3. JAVA 8 = REVOLUTION DANS LA VIE DU CODEUR ! QUELLES SONT LES AVANTAGES ? 1er AVANTAGE : Permet d’ajouter la programmation fonctionnelle 2ème : Elimination du Boilerplate code (voir plus tard) et des effets de bord 3ème : Concurrence et scalabilité Y A PLEIN D’AUTRES AVANTAGES Amélioration significatives des API Dates Streaming
  4. La concurrence La scalabilité Les effets de bords NEXT : LA Prog fonctionnelle alors c’est quoi ?
  5. WIKIPEDIA : La programmation fonctionnelle est un paradigme de programmation de type déclaratif qui considère le calcul en tant qu'évaluation de fonctions mathématiques. Une notion clé : Pure fonction : 2 principes : Toujours les même paramètres, toujours le même résultat : Si 2+2 != 4 Une fonction ne doit jamais changer son environnement : on ne change pas d’état de nos objets en programmation fonctionnelle CONSEQUENCE : Réduction des effets de bords
  6. EN JAVA CA INTRODUIT LA FONCTIONNALITE SUIVANTE : PARAMETRE = Un bout de code à exécuter, un instruction très précise. Switch to Code : public void printDemo(){ System.out.println("Enjoy your lunch"); } public static void main(String... args){ GetStarted started = new GetStarted(); started.printDemo(); } Le souhait est de passer en paramètre quelque chose qui permet l’exécution : System.out.println("Enjoy your lunch"); Et pouvoir se dire que finalement printDemo peut faire ce qu’on veut
  7. PROBLEME DE LA PROGRAMMATION ORIENTÉ OBJECT : Tout est objet Tout bloc de code
  8. git clone https://github.com/bdzzaid/lunch-n-learn-lambda.git git fetch git checkout presentation
  9. Pour répondre à l’objectif «PASSER UN TRAITEMENT (BEHAVIOR) EN PARAMETRE D’UNE METHODE » NOUVEAU CONCEPT JDK 8 : * Le code exécutable n’est «encapsulé» dans une classe ou objet plus une méthode d’une classe ou d’un objet mais juste du code (ICI executableCode n’est pas typé, on revient sur ce point en deuxième partie) Décrire l’INLINE VALUE Décrire FUNCTION AS A VALUE (connu aussi sous le nom de - High order function, ) La classe qui exécute le code est aussi connu sous le nom de First-class citizen : Classe qui supporte toutes les operations décrites ailleurs SLIDE SUIVANT : EXPLICATION AVANT EXEMPLE
  10. Pour bien comprendre : Ecrire du code lambda se fait au sein d’une exécution de code. Déclarer une expression Lambda en attribut d’une classe est dénouée de sens : Contre objectif initial Mauvais développeur (il suffit d’avoir une méthode dans la classe à ce moment là).
  11. Quand on y pense, depuis toujours elle sait le faire. Pour exemple : public void return new Object(); Ca ne compile pas. SLIDE SUIVANT => Inférence de type
  12. ALORS EST-CE QUE D’APRES VOUS, AVONS-NOUS BESOIN DE PRECISER LE TYPE DE RETOUR POUR UNE EXPRESSION LAMBDA ? L'inférence de types est un mécanisme qui permet à un compilateur ou un interpréteur de rechercher automatiquement les types associés à des expressions, sans qu'ils soient indiqués explicitement dans le code source
  13. Pourquoi ? Pensez aux autres cas d’utilisations des paranthèses et des accollades quand vous tentez de déclarer une variable en java : Cast d’un objet Initialisation d’un tableau
  14. Pourquoi ? Pensez aux autres cas d’utilisations des paranthèses et des accollades quand vous tentez de déclarer une variable en java : Cast d’un objet Initialisation d’un tableau
  15. Le mot clé «return» n’est pas obligatoire pour les instructions d’une ligne
  16. Le mot clé «return» ici est obligatoire Lorsque l’expression fait plusieurs lignes, le développeur perd la visibilité de son code. La conclusion est que l’expression lambda doit être utilisée pour des expressions courtes. Autres exemples :
  17. Switch to exemple. Conclusion : LAMBDA EXPRESSION : FUNCTION AS A VALUE : PLUS BESOIN DE CLASSE POUR EXECUTER DU CODE INFERENCE DE TYPE : SMART JVM, détermination du type de retour et des paramètre en input
  18. A montrer : - L’interface HelloWorld Java 7 Insister sur le fait que : @FunctionalInterface (ça ne fait absolument rien, confort pour le développeur) Créer la méthode : public class HelloWorld { public void myMethod(HelloWorldInterface myFucntion){ myFucntion.printSomething(); } public static void main(String[] args){ HelloWorldInterface executableCode = () -> { System.out.println("Hello"); }; HelloWorld hello = new HelloWorld(); hello.myMethod(executableCode); hello.myMethod(() -> System.out.println("world")); } }
  19. ETAPE DE PRESENTATION : Créer la classe HelloMathInterface avec une seule méthode Créer la classe HelloMath avec la méthode main (ci-dessous) => Exécuter Update HelloMathInterface en ajoutant la méthode sum de double Exécuter et expliquer l’erreur Ajouter le mot clé default Autre exemple : Créer la classe HelloMathInterface : @FunctionalInterface public interface HelloMathInterface { int sum(Integer a, Integer b); } Créer la classe HelloMath : package tuto.lunchnlearn; public class HelloMath { public static void main(String[] args){ HelloMathInterface math = new HelloMathInterface() { @Override public int sum(Integer a, Integer b) { return a * b; } }; System.out.println(math.sum(10,5)); } }
  20. git clone https://github.com/bdzzaid/lunch-n-learn-lambda.git git fetch git checkout presentation2
  21. https://github.com/bdzzaid/lunch-n-learn-lambda/blob/master/site/write-lambda.md
  22. git clone https://github.com/bdzzaid/lunch-n-learn-lambda.git git fetch git checkout solution1