En tant que développeurs Java, nous avons tous rencontré la fameuse NullPointerException (NPE). C'est comme un invité non invité à une fête, qui arrive au moment le moins attendu et cause toutes sortes de problèmes. Mais n’ayez crainte ! Java 8 a introduit un outil puissant pour nous aider à faire face à ce problème : la classe Optionnel.
Dans ce guide, nous explorerons Facultatif à travers une série d'exemples pratiques. Nous commencerons par les bases et progresserons vers des techniques plus avancées. À la fin, vous aurez une solide compréhension de la façon d'utiliser Facultatif pour écrire du code Java plus sûr et plus expressif.
Commençons par examiner un scénario courant : trouver un étudiant dans une liste. Nous verrons d'abord l'approche traditionnelle, puis nous verrons comment Optionnel peut améliorer notre code.
Décomposons cela. Dans notre TraditionalStudentFinder, nous utilisons un modèle commun : renvoyer null lorsque nous ne trouvons pas ce que nous cherchons. Cela semble assez innocent, mais c'est en fait une bombe à retardement dans notre code.
Le problème se pose lorsqu'on essaie d'utiliser le résultat. Regardez la méthode principale. Nous recherchons "David", qui n'est pas dans notre liste. Quand on essaie d’imprimer le nom de l’élève trouvé, boum ! Nous obtenons une NullPointerException.
La racine du problème est que la signature de notre méthode findStudent ne donne aucune indication qu'elle pourrait ne pas renvoyer d'étudiant. Il est trop facile d'oublier de vérifier la valeur null, ce qui entraîne des erreurs d'exécution qui peuvent être difficiles à localiser.
Voyons maintenant comment nous pouvons améliorer cela en utilisant Facultatif.
Exemple 2 : Présentation de Facultatif
Maintenant, c'est bien mieux ! Passons en revue les changements que nous avons apportés.
Tout d'abord, notez que notre méthode findStudent renvoie désormais un message Facultatif
Dans la méthode, nous utilisons Optionnel.of(s) pour envelopper l'étudiant lorsque nous en trouvons un, et Optionnel.empty() lorsque nous n'en trouvons pas. Cela représente explicitement les deux résultats possibles de notre recherche.
La vraie magie se produit dans la méthode principale. Nous utilisons la méthode ifPresentOrElse pour gérer les deux cas : lorsqu'un élève est trouvé et lorsqu'il ne l'est pas. Plus de NullPointerException !
Cette approche nous oblige à considérer le cas où un étudiant pourrait ne pas être trouvé. Cela rend notre code plus robuste et auto-documenté. Quiconque lit ce code comprend immédiatement que trouver un étudiant n'est pas garanti.
Maintenant que nous avons les bases, explorons quelques fonctionnalités plus avancées d'Optional. Ces techniques vous aideront à écrire un code encore plus propre et plus expressif.
Exemple 3 : Transformer des valeurs avec map()
Dans cet exemple, nous introduisons la méthode map() de Optionnel. Considérez map() comme un moyen de transformer le contenu d'un facultatif sans vous soucier de savoir s'il est vide ou non.
Tout d'abord, remarquez comment nous avons simplifié notre méthode findStudent à l'aide de flux. Il s'agit d'une manière plus concise de créer un élément facultatif<Étudiant>.
La partie intéressante est la façon dont nous utilisons map(). Nous prenons notre option <Étudiant> et transformez-le en un facultatif
C'est puissant car cela nous permet d'enchaîner les opérations de manière null-safe. Nous pouvons transformer le contenu d'un facultatif sans vérifications nulles explicites ni instructions if.
Enfin, nous utilisons ifPresent() pour imprimer le nom en majuscule uniquement s'il existe. Ce modèle de map() suivi de ifPresent() est très courant lorsque l'on travaille avec Facultatif.
Exemple 4 : Chaînage d'opérations avec flatMap()
Nous nous aventurons maintenant dans un territoire plus complexe avec flatMap(). Cette méthode est particulièrement utile lorsque vous disposez d'une chaîne d'opérations qui renvoient chacune un facultatif.
Dans cet exemple, nous essayons de trouver le titre du cours auquel un étudiant est inscrit. Remarquez que nous avons deux méthodes qui renvoient Facultatif : findStudent() et getEnrolledCourse().
La magie opère dans cette ligne :
On commence par trouver un étudiant. Si nous en trouvons un, nous recherchons ensuite le cours inscrit. Si nous trouvons un cours, nous obtenons son titre. À tout moment de cette chaîne, si nous ne trouvons pas ce que nous cherchons, nous nous retrouvons avec un Facultatif vide.
Pourquoi utiliser flatMap() au lieu de map() ? Si nous utilisions map(), nous nous retrouverions avec un facultatif imbriqué (Optional
Ce modèle est incroyablement puissant pour gérer des chaînes d'opérations où chaque étape peut ne pas donner de résultat. Cela nous permet d'exprimer des opérations complexes de manière très claire et lisible.
Au fur et à mesure que nous approfondirons Facultatif, nous explorerons des techniques plus avancées qui vous aideront à écrire un code encore plus robuste et expressif.
Exemple 5 : Combinaison de plusieurs options
Dans cet exemple avancé, nous travaillons avec plusieurs objets facultatifs. Nous avons une méthode calculateAverageGrade qui prend deux paramètres facultatifs et renvoie un facultatif
La clé ici est la manière dont nous enchaînons les opérations flatMap pour gérer les deux entrées facultatives. Cela garantit que la note moyenne n'est calculée que si un étudiant et un cours sont présents. Si l’un ou l’autre manque, nous nous retrouvons avec un facultatif vide.
Ce modèle est extrêmement utile lorsque vous devez effectuer une opération qui dépend de plusieurs valeurs facultatives. Il permet de gérer toutes les combinaisons possibles de présence/absence dans un style épuré et fonctionnel.
Exemple 6 : Utilisation de Facultatif dans les flux
Cet exemple montre comment Optionnel s'intègre de manière transparente aux flux Java. Nous effectuons ici deux opérations :
Calcul de l'âge moyen des étudiants de plus de 20 ans.
Trouver l'élève le plus âgé.
Dans la première opération, nous utilisons orElse(0.0) pour fournir une valeur par défaut si aucun étudiant de plus de 20 ans n'est trouvé. Il s'agit d'un modèle courant lorsque vous travaillez avec des résultats facultatifs d'opérations de flux.
Pour trouver l'étudiant le plus âgé, nous utilisons réduire pour comparer les étudiants, ce qui renvoie un résultat facultatif
Ces exemples démontrent comment Optionnel peut être utilisé efficacement dans des scénarios plus complexes, en particulier lorsque vous travaillez avec des flux et lorsque vous traitez plusieurs valeurs facultatives.
Conclusion : adopter l'option facultative pour un code plus sûr
Nous sommes passés des bases d'Optional à certaines de ses utilisations plus avancées. À présent, vous devriez voir qu'Optional est plus qu'un simple remplacement de vérification nulle : c'est un outil puissant pour écrire du code Java plus expressif et plus sûr.
N'oubliez pas que le but de Optionnel n'est pas seulement d'éviter les vérifications nulles, mais de nous forcer à réfléchir et à gérer les cas où les valeurs pourraient être absentes. Cela rend nos API plus honnêtes et notre code plus robuste.
Alors que vous poursuivez votre parcours Java, conservez Facultatif dans votre boîte à outils. Utilisez-le lorsque vous renvoyez des valeurs qui ne sont pas toujours présentes et exploitez ses méthodes pour écrire un code plus propre et plus fonctionnel. Votre futur moi (et vos coéquipiers) vous remercieront lorsqu'ils rencontreront moins d'exceptions NullPointerExceptions et plus de code explicite.
Maîtriser Java en option : vos prochaines étapes
Félicitations ! Vous venez d'améliorer vos compétences Java en découvrant Facultatif. Mais pourquoi s'arrêter là ? Portons votre expertise Java vers de nouveaux sommets !
? Cours gratuit de maîtrise de Java
Prêt à devenir un pro de Java ? Notre cours complet Core Java est votre ticket vers le succès - et il est entièrement gratuit !
Cliquez ici pour commencer votre voyage Java
Dans ce cours, vous apprendrez :
Ne manquez pas cette opportunité de transformer vos compétences Java. Des milliers de développeurs en ont déjà bénéficié – vous pourriez être le prochain !
? Pratique pratique : référentiel GitHub
La théorie, c'est bien, mais la pratique rend parfait. Nous avons préparé un référentiel GitHub avec tous les exemples de code de ce didacticiel, ainsi que des défis supplémentaires pour renforcer votre apprentissage.
Accédez au référentiel de didacticiels facultatifs Java
Démarrez le référentiel pour montrer votre soutien et restez informé des nouveaux exemples !
? Points clés à retenir
N'oubliez pas ces points cruciaux concernant l'option :
Facultatif ne concerne pas seulement les vérifications nulles : c'est votre chemin vers un code Java plus robuste et plus expressif.
Prêt à poursuivre votre maîtrise de Java ? Cliquez sur le lien du cours ci-dessus et commencez à coder comme un pro dès aujourd'hui !
Bon codage et à bientôt dans le cours ! ?????
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!