Tutoriel JAVA N°17 : expression Lambda Java 8 premiers pas

/////Tutoriel JAVA N°17 : expression Lambda Java 8 premiers pas

java-9.jpg 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

Introduction

Partie 1 : exploitation ‘classique’ d’une interface JAVA

Partie 2 : discussions

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)

Conclusion

Votre avis nous interesse

Cerfification

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) :

demo-lambda-1

Expliquez

TELECHARGEZ le PROJET ECLIPSE CORRESPONDANT

demolambdajava8-v1

Partie 2 : Discussions

Le codage de la classe Saxophone a été nécessaire pour pouvoir utiliser l’interface Instrument…!

demo-lambda-2

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 …

demo-lambda-3

Voici comment faire évoluer notre code : renommez la classe ‘Saxophone’ en Instrument :

demo-lambda-4

 

demo-lambda-5

 

demo-lambda-6

 

demo-lambda-7

Analysez les fichiers .class générés dans le Workspace Eclipse

demo-lambda-8

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 :

demo-lambda-9

Si nous enlevons ce code nous obtenons :

demo-lambda-10

…ça ne compile plus !

Sauf si nous ajoutons au bon endroit l’opérateur lambda :

demo-lambda-11

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)

demolambdajava8-v2

 

demo-lambda-12

 

demo-lambda-13

 

demo-lambda-14

 

demo-lambda-15

 

demo-lambda-16

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 :

demolambdajava8-v3

Analysez les fichiers .class générés dans le Workspace Eclipse

Expliquez. Quelle différence avec la version initiale ?

demo-lambda-17

Ajouter d’un paramètre

demo-lambda-18-a

 

demo-lambda-18-b

 

demo-lambda-18-c

 

demo-lambda-18-d

 

demo-lambda-18

Inférence

demo-lambda-18-e

 

demo-lambda-18-f

 

demo-lambda-18-g

 

demo-lambda-18-h

 

demo-lambda-18-i

 

demo-lambda-18-j

 

demo-lambda-18-k

 

demo-lambda-18-l

 

demo-lambda-18-m

 

demo-lambda-18-n

Professionnels : maîtrisez les nouveautés Java 8 et 9 !

java-9.jpg
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 !

2018-01-25T07:31:33+01:00

Contactez nous

241 rue DUGUESCLIN, 69003 Lyon

Web : Objis : spécialiste formation Java