Avec Objis, spécialiste Java depuis 2005, maîtrisez les enjeux et la mise en oeuvre opérationnelle des expressions lambda, nouveauté très attendues de Java 8. Comprenez comment l’opérateur lambda (->) permet de simplifier la mise en oeuvre d’interfaces JAVA ne possédant qu’une seule méthode. Enfin, comprenez l’impact des expressions lambda sur le code compilé.
ASTUCE –> Soyez informé de la mise à jour ou création de tutos sur objis.com.
Auteur
Douglas MBIANDOU. Président Objis . Concepteur formation ‘Nouveautés Java 8 et 9’
Prérequis
Développeur Java comprenant notions d’interface, classe anonyme.
Objectifs
Comprendre les enjeux associés aux expressions lambda
Montrer l’impact de l’expression lambda sur le code compilé
Gérer avec les expressions lambda les paramètres et types de retour
Comprendre l’inférence de méthode avec les expressions lambda
Programme
Partie 1 : exploitation ‘classique’ d’une interface JAVA
Partie 3 : refactoring N°1 (classe anonyme)
Partie 4 : refactoring N°2 (expression lambda – multiligne)
Partie 5 : refactoring N°3 (expression lambda – une ligne)
Partie 6 : refactoring N°4 (expression lambda – paramètre)
Durée
25 min
Contexte et enjeux
INFO 1 : jusqu’à Java 7, il n’existait que deux types de références : des références vers des valeurs primitives (int i = 37), et des références vers des instances d’objets (Employe employe1 = new Employe()).
INFO 2 : dans d’autres langages (Groovy, Scala,…) pourtant, il était déjà possible d’établir des références vers des ‘closures’, c’est-à-dire des blocs de code anonymes.
INFO 3 : en Java, qui ne disposait pas de cette facilité, la technique qui s’en rapproche le plus consiste à définir une interface décrivant la fonctionnalité souhaitée, puis à instancier une classe (souvent anonyme) implémentant la fonctionnalité. L’instance obtenue peut alors être affectée à une référence et/ou être passée en paramètre d’une méthode… cette façon de faire est très verbeuse comme vous le constaterez plus loin dans ce tutoriel.
INFO 4 : de ce fait, Oracle s’est décidé à intégrer les closures dans le langage. Ainsi à partir de Java 8 , il est possible d’avoir une référence vers…une méthode !
DEFINITION : une expression Lambda est l’implémentation d’une closure en java.
SYNTAXE : une closure se conçoit comme une méthode anonyme. A ce titre, elle peut accepter des paramètres et retourner un résultat.
Elle peut prendre deux formes :
(paramètres) -> instruction OU bloc_d’instructions
4 exemples d’expressions lambda
Exemple 1
(int x) -> x * 10
cette expression prend un paramètre x de type int, et renvoie 10 fois sa valeur. Notez l’absence du mot-clé return : la valeur de l’expression est automatiquement renvoyée.
Exemple 2
(String texte) -> System.out.println(texte);
La deuxième expression accepte un paramètre de type String mais ne renvoie rien.
Exemple 3
(int x) -> System.out.println(texte);
return x * 10;
cette expression est une variante de la première, qui utilise un bloc d’instructions. Cette fois, le mot-clé return est nécessaire.
Exemple 4
() -> 85
Enfin, la quatrième expression ne prend aucun paramètre, et renvoie la constante 85.
Partie 1 : Approche classique de mise en oeuvre d’une interface
Analysez le code suivant (ici classes et interfaces codées dans le même fichier pour faciliter la compréhension) :
Expliquez
TELECHARGEZ le PROJET ECLIPSE CORRESPONDANT
Partie 2 : Discussions
Le codage de la classe Saxophone a été nécessaire pour pouvoir utiliser l’interface Instrument…!
Il arrive (Thread, Swing) que nous n’ayons pas besoin (ou envie) de coder / nommer une classe spécifique pour pouvoir exploiter l’interface.
Partie 3 : refactoring N°1 (classe anonyme)
Commentez le code de la classe …
Voici comment faire évoluer notre code : renommez la classe ‘Saxophone’ en Instrument :
Analysez les fichiers .class générés dans le Workspace Eclipse
Expliquez
Partie 4 : refactoring N°2 (expression lambda – multiligne)
Ci-dessous en bleu surligné (ainsi que en rouge entouré) le code qui ne représente aucune valeur ajoutée pour ce que nous avons à faire :
Si nous enlevons ce code nous obtenons :
…ça ne compile plus !
Sauf si nous ajoutons au bon endroit l’opérateur lambda :
BRAVO ! grace à l’opérateur lamba, vous avez pu réduire le code , tout en ayant le même résultat.
TELECHARGEZ le PROJET ECLIPSE CORRESPONDANT
Partie 5 : refactoring N°3 (expression lambda – une ligne)
TELECHARGEZ le PROJET ECLIPSE CORRESPONDANT
Partie 6 : refactoring N°4 (paramètre)
Puisqu’il n’y a qu’une seule instruction, on peut faire encore mieux :
Analysez les fichiers .class générés dans le Workspace Eclipse
Expliquez. Quelle différence avec la version initiale ?
Ajouter d’un paramètre
Inférence
Professionnels : maîtrisez les nouveautés Java 8 et 9 !
A travers notre nouvelle formation Nouveautés Java 8 et 9 (durée 4 jours) conçue par l’auteur de ce tutoriel, découvrez par la pratique le nouveau système de Modules Java 9 ainsi que des caractéristiques de Java 8 (Streams, Lambda, Optional…).
Un sérieux atout pour votre employabilité et l’évolution de votre carrière professionnelle !