Les expressions lambda en Java
Les expressions lambda sont introduites dans Java 8 et sont utilisées dans la programmation fonctionnelle. Une expression lambda est donc une fonction qui peut être créée sans appartenir à aucune classe. Une expression lambda peut être transmise comme s’il s’agissait d’un objet et exécutée à la demande.
Les expressions lambda Java sont couramment utilisées pour implémenter des listeners / callbacks, ou dans la programmation fonctionnelle avec l’API Java Stream.
Une expression lambda est traitée comme une fonction, donc le compilateur ne crée pas de fichier .class.
Interface fonctionnelle
L’expression lambda fournit l’implémentation d’une interface fonctionnelle. Une interface qui n’a qu’une seule méthode abstraite est appelée une interface fonctionnelle. Java fournit une annotation @FunctionalInterface, qui est utilisée pour déclarer une interface comme interface fonctionnelle.
Pourquoi utiliser les expressions lambda
- Pour fournir l’implémentation d’une interface fonctionnelle.
- Moins de code.
Syntaxe d’une expression lambda
(liste d'arguments) -> {corps}
Liste d’arguments peut être:
Zéro paramètre:
() -> System.out.println("Zéro paramètre");
Un seul paramètre:
(a) -> System.out.println("Un seul paramètre: " + a);
Plusieurs paramètres:
(a, b) -> System.out.println("Plusieurs paramètres: " + a + ", " + b);
Voici les caractéristiques importantes d’une expression lambda.
- Type facultative : Pas besoin de déclarer le type d’un paramètre. Le compilateur peut déduire le type de la valeur du paramètre.
- Parenthèse facultative autour du paramètre : Pas besoin de déclarer un seul paramètre entre parenthèses. Si vous avez plusieurs paramètres, des parenthèses sont requises.
- Accolades facultative : Pas besoin d’utiliser des accolades dans le corps d’une expression si le corps contient une seule instruction.
- Le mot clé « return » est facultatif : Le compilateur renvoie automatiquement la valeur si le corps a une seule expression. Des accolades sont nécessaires pour indiquer que l’expression renvoie une valeur.
Exemple:
public class Main { public static void main(String args[]) { //avec la déclaration de type Operation addition = (int x, int y) -> x + y; //sans déclaration de type Operation soustraction = (x, y) -> x - y; //avec 'return' et les accolades Operation multiplication = (int x, int y) -> { return x * y; }; //sans 'return' et sans les accolades Operation division = (int x, int y) -> x / y; System.out.println("8 + 2 = " + calculer(8, 2, addition)); System.out.println("8 - 2 = " + calculer(8, 2, soustraction)); System.out.println("8 x 2 = " + calculer(8, 2, multiplication)); System.out.println("8 / 2 = " + calculer(8, 2, division)); } interface Operation { int calc(int x, int y); } private static int calculer(int x, int y, Operation op) { return op.calc(x, y); } }
Sortie:
8 + 2 = 10 8 - 2 = 6 8 x 2 = 16 8 / 2 = 4