Java 8 : Les nouveautés

Définir et utiliser les expressions lambda

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Les expressions lambda sont des fonctions créées à la volée, à l'endroit où on en a besoin. Il n'y a ni classe à déclarer, ni code de structure inutile.

Transcription

Dans cette vidéo donc, nous allons parler des lambda expressions, de leur utilisation et de leur syntaxe. Alors, qu'est-ce que c'est que la lambda expression ? Eh bien, il s'agit en fait de créer une fonction en quelque sorte, "à la volée", au moment où vous en trouvez l'usage ou au moment où vous en avez besoin. Alors je vais faire pour cet exemple, une petite classe qui va me servir de support, à savoir bien entendu la classe personne, que je vais équiper d'un attribut privé, "âge", qui sera un simple entier. Je vais l'équiper aussi d'une méthode d'accès, getAge, un accesseur getAge, qui me permettra donc de récupérer l'âge, et je vais introduire aussi un constructeur qui me permettra de créer des objets personne, avec un certain âge. Donc bien entendu ici, une personne. Voilà, donc code assez classique, assez simple. On appellerait ça un POJO finalement, un objet très simple en Java un Plain Old Java Object, avec des attributs, des getters et des constructeurs. Donc rien de transcendant. J'aurais pu rajouter les setters aussi. Dans le main, ce que je vais faire ici, c'est créer un tableau de personnes, que je vais appeler "les personnes", que je vais alimenter en créant des objets personnes qui ont des âges variés. Voilà, new personne, alors en quelque sorte ces objets sont anonymes. Surtout, ce qu'il faut repérer,c'est que ces objets ne sont pas créés dans un ordre particulier au niveau des âges. Donc j'ai alimenté mon tableau et donc, ici ce que je vais faire c'est ressortir chacune des personnes de mon tableau, et faire afficher la personne en question. P.getAge, en l'occurrence l'âge de la personne. On verra donc, dans quel ordre ça sort. Donc je vais commencer par exécuter une première fois mon application, et je vois effectivement que ça ressort bien dans l'ordre d'insertion des objets dans le tableau. Donc maintenant je vais introduire un tri bien sûr, et pour cela, je vais utiliser sur la classe arrays, la méthode sort. Cette méthode sort, -alors y a plusieurs versions- mais je vais utiliser la version qui prend en paramètre donc, un tableau et un algorithme de tri. Alors comment faire, créer, introduire un algorithme de tri ? Première possibilité, c'est de créer une classe implémentant comparator. Comparator, donc c'est une interface qui proposera de comparer les différents objets personne. En quelque sorte j'introduis qui implémente comparator, la relation d'ordre entre les personnes. Deuxième possibilité, qui se veut plus légère que cette première possibilité -qui m'oblige à créer une classe quand même-, eh bien c'est de référencer une méthode, qui existe. Alors le problème c'est, est-ce que cette méthode existe ? Et cette méthode donc serait une méthode qui introduirait encore une fois la relation d'ordre. Et la troisième possibilité ,et de loin la plus légère, c'est utiliser les lambda expressions. Et utiliser une lambda expression ici, c'est tout simplement créer à la volée, à ce moment-là, au moment où j'en ai besoin, la méthode qui va comparer 2 personnes. Alors comment ça s'introduit ? Eh bien d'abord, il faut fournir les paramètres. Donc la syntaxe générale, c'est fournir les paramètres, éventuellement entre parenthèses. Donc ici j'en ai besoin de 2, paramètres. Donc effectivement je vais dire pour P1 et P2, que l'on trouve dans les personnes, alors voilà le corps de la fonction que je vais exécuter, donc la marque des lambda expressions, c'est la flèche pour ces paramètres là. Voilà le corps que nous allons exécuter. Et ce corps là doit être compatible avec ce que la méthode de tri attend. C'est à dire que je dois retourner ici maintenant un entier qui indique si P1 est plus grand que P2, ou le contraire. Donc ici je vais indiquer par exemple, je vais trier donc P1 et P2 avec leur âge, en retournant une valeur entre P1.getAge et P2.getAge. Je fais donc un corps de méthode classique entre accolades. Ici donc, je travaille sur un retour, mais la lambda expression n'est bien sûr pas limitée à un simple retour. Je pourrais ici avoir des codes complexes. Bon, bien entendu vu la forme syntaxique d'une lambda expression, vous éviterez expressions sur 24 lignes, parce qu' évidemment, je perdrais très rapidement le fil de mon code. De même ici, si je peux avoir des formes plus simples, à savoir que je pourrais, au niveau de la syntaxe générale de la lambda expression, avoir un truc du genre pour P, alors voilà le code, point. En fait, la forme de la lambda expression, c'est quelque chose comme ça. Ici, comme j'ai 2 paramètres, je suis obligé d'introduire les 2 paramètres par des parenthèses, et comme mon code est somme toute un peu compliqué, je suis obligé de l'introduire avec des accolades. Nous n'oublierons pas le point virgule bien sûr pour terminer réellement le bloc de code correspondant à cette instruction finalement. Donc maintenant si j'exécute mon application, effectivement des tris y sont effectués, donc ce qui se passe, c'est que cette fonction, qui finalement est quelque part objectivée en quelque sorte, puisque Java est quand même un langage orienté objet. En fait ici vous êtes devant une espèce d'objet anonyme qui est donc l'objet fonction lui-même, ou si vous préférez un objet qui encapsule la fonction que je cherche à déclencher. Donc voilà la forme générale des lambda expressions, voilà l'usage. Encore une fois non pas un outil pour polluer l'adversaire et introduire du code compliqué. Alors pourquoi un code compliqué ? Eh bien tout simplement que, vu de loin en fait, ce bloc de codes fait partie globalement de ma fonction main, mais on voit bien que ce bloc de codes est exécuté à un moment qui est éventuellement retardé par rapport au bloc de main. On pourrait avoir des problèmes d'accès aux variables, par exemple dans ce bloc de codes par rapport à des variables qui seraient définies à l'intérieur d'une fonction d'instance, en particulier bon là on est dans du static, donc pas bien méchant, mais dans une fonction d'instance, les variables locales par exemple ou éventuellement les variables d'instance pourraient poser des problèmes d'accès et de manipulation dans les lambda expressions. Donc ces fonctions lambda sont faites pour créer à la volée la fonction là où vous en avez besoin.

Java 8 : Les nouveautés

Découvrez les nouveautés introduites par la version 8 de Java. Voyez les expressions lambda, les références de méthodes, les méthodes par défaut dans les interfaces, etc.

1h44 (21 vidéos)
Aucun commentaire n´est disponible actuellement
Logiciel :
Spécial abonnés
Date de parution :17 août 2015

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !