Exemples d'apprentissage d'expressions lambda en Java
Source :
Medium Dans cet article, nous examinerons les expressions lambda, la base de la programmation fonctionnelle en Java.
Syntaxe des expressions Lambda
La syntaxe des expressions lambda est intuitive, facile à comprendre et à utiliser. Une expression lambda se compose de :
- Paramètres d'entrée
- flèche d'opérateur
- bloc d'expressions/instructions
Le format général est le suivant :
<input-params> -> <function-code>
Exemples d'expressions lambda
Les expressions lambda sont mieux comprises à travers des exemples, examinons donc quelques-uns d'entre eux.
1. N'accepte pas l'entrée et ne renvoie pas la sortie
Une simple expression lambda ne prend aucune entrée et ne renvoie aucune sortie : il s'agit littéralement d'un simple bloc de code qui s'exécute sans aucun contexte.
() -> System.out.println("Here I am!");
Spécifier
() au début, à la position des paramètres d'entrée, signifie qu'aucun paramètre n'est transmis (comme avec les parenthèses vides qui suivent une méthode qui n'a aucun paramètre).
2. Accepte une seule entrée, ne renvoie aucune sortie
Pour qu'une expression lambda prenne un paramètre, nous le plaçons à la position des paramètres d'entrée :
name -> System.out.println("Here you are too, " + name + "!");
NOTE : Si nous avons un paramètre d'entrée, nous pouvons omettre les parenthèses. On peut aussi préciser (nom), c'est tout à fait acceptable.
3. Accepte plusieurs entrées, ne renvoie aucune sortie
Lorsque nous passons plusieurs paramètres d'entrée à une expression lambda, nous devons :
- mettre les paramètres entre parenthèses
- utilisez une virgule pour les séparer
(name, food) -> System.out.println("So " + name + " enjoys eating " + food + "... interesting!");
4. Contient plusieurs instructions dans une section de code
Le stockage des expressions lambda dans des instructions sur une seule ligne est considéré comme une bonne pratique. Mais vous pouvez également utiliser plusieurs lignes :
() -> {
System.out.println("The owl and the pussycat went to sea");
System.out.println("in a beautiful pea green boat");
}
5. Les types de retour ne sont jamais spécifiés
Comme vous l'avez peut-être remarqué, lors de la définition d'une expression lambda, aucun type de retour n'est spécifié. Voici un exemple :
() -> System.out.println("I don't return anything!")
Et encore un :
() -> "I return this String!"
Les deux exemples de code sont presque identiques, mais le deuxième lambda renvoie une chaîne. Veuillez garder cela à l'esprit lorsque vous les utilisez. Bien entendu, le compilateur comprendra la différence entre eux grâce à l’utilisation conditionnelle de descripteurs de fonctions.
6. L'inférence de type est appliquée automatiquement lorsque cela est possible
Pour déterminer le type, le compilateur utilisera l'inférence de type. Pour ce faire, il examine le contexte d'exécution de l'expression lambda. Pour le développeur, cela signifie qu'il n'aura pas à se soucier de la conversion vers un type spécifique.
7. Notation du descripteur de fonction
Lorsque nous réfléchissons aux types auxquels une expression lambda peut être attribuée, il est très utile d'utiliser des descripteurs de fonction. Un handle de fonction est essentiellement une signature de méthode fournie par une expression (ou méthode) lambda. Sa syntaxe est presque la même que celle des expressions lambda, sauf qu'au lieu d'une section de code, il existe une section de type de sortie. Voici un exemple :
<input-parameter-types> -> <output-parameter-type>
Exemples de descripteurs de fonctions
Voici quelques exemples de descripteurs de fonctions :
() -> () Une méthode qui ne prend aucun paramètre d'entrée et ne renvoie pas de valeur.
(String) -> () Méthode qui accepte un paramètre d'entrée et ne renvoie pas de valeur.
() -> (int, float) Une méthode qui ne prend aucun paramètre d'entrée et renvoie
un int et un
float(int[]) -> .
(SortedMap<Character, Integer>) Méthode qui prend un tableau
int et renvoie
un SortedMap de
Character à
Integer . Avoir des descripteurs de fonction facilite l'évaluation de la compatibilité des types lorsque l'on considère les types cibles que nous pouvons utiliser pour une expression lambda.
Conclusion
Comme vous pouvez le constater, les expressions lambda constituent un moyen simple et efficace d’encapsuler un comportement. C'est l'un des fondements du paradigme de programmation fonctionnelle introduit en Java avec la sortie du JDK 8.
7 fonctionnalités les plus sous-estimées d'IntelliJ IDEA
Source :
Better Programming C'est difficile à croire, mais plusieurs années plus tard, je rencontre encore des gens qui ne connaissent pas ces fonctionnalités intéressantes d'IntelliJ IDEA.
1.Trouvez n'importe quoi
Il est assez difficile de se souvenir de chaque combinaison de touches et de suivre tout ce qu'IntelliJ IDEA peut faire. C'est pourquoi j'utilise souvent la recherche dans IntelliJ IDEA. Cela m'aide à trouver les éléments de menu, les outils, les paramètres et même les fichiers dont j'ai besoin au même endroit.
2. Sachez où vous êtes
Avant de trouver cette fonctionnalité, j'ai utilisé le bouton « Sélectionner un fichier ouvert » pour afficher le fichier actuellement édité dans l'arborescence du projet.
Maintenant, IntelliJ IDEA fait cela pour moi. Ce n'est pas une option par défaut, vous devrez donc la définir pour chaque projet nouveau ou existant.
3. Optimisation SQL
Saviez-vous que le plugin de base de données par défaut de votre IDE est plus qu'un simple exécuteur SQL ? Étant donné que la couche de persistance (E/S) est toujours la partie la plus lente de l'application, je m'assure toujours que mes requêtes SQL ont un bon plan d'exécution lorsque je travaille avec des bases de données relationnelles.
4. Édition multiligne
Vous avez peut-être déjà utilisé cette fonctionnalité dans Sublime Text Editor.
5. Revenir en arrière/en avant
En fait, je reviens souvent là où j'étais avant en appuyant sur les boutons Précédent ou Suivant.
Reculer/avancer : ⌥⌘+flèche gauche/droite (Ctrl+Alt+flèche gauche/droite pour Win/Linux). Pour ouvrir les fichiers récents, appuyez sur ⌘E (Ctrl+E pour Win/Linux).
6. Signets
Je mets en favoris les parties importantes du code afin de pouvoir m'y référer rapidement à tout moment.
Pour accéder à un signet, appuyez sur ⌃+<numéro> (Ctrl+<numéro> pour Win/Linux). Je dirai tout de suite que je n'utilise pas plus de trois signets à la fois, car il devient alors difficile de se rappeler à quoi ils servent.
7. Un éditeur pour tout
J'avais l'habitude d'ouvrir d'autres éditeurs de texte comme Visual Studio Code ou Sublime pour enregistrer des parties de code, JSON, XML, puis créer un lien vers elles. Mais cela ne fait pas partie de la base de code (projet), et IntelliJ IDEA vous le rappelle clairement lorsque vous essayez de créer ou de modifier quelque chose comme ça. Ensuite, j'ai vu un de mes collègues utiliser des Snippets et j'ai réalisé à quel point c'était génial.
Nouveau fichier Snippet : ⇧⌘N (Shift+Ctrl+N pour Win/Linux). Les extraits sont disponibles et synchronisés sur toutes les fenêtres de vos projets. Je les utilise souvent pour examiner et formater du JSON ou du SQL que j'ai obtenu ailleurs.
Ma recette secrète
La cerise sur le gâteau est une fonctionnalité qui me fait gagner beaucoup de temps de frappe chaque jour :
Tabnine est un plugin JetBrains permettant de compiler du code Intellij IDEA alimenté par l'IA. C'est gratuit pour l'instant, mais dépêchez-vous, je ne pense pas que cela durera longtemps.
GO TO FULL VERSION