[JAVA] À propos de la gestion de Null

Je pense que beaucoup de gens peuvent trouver la vérification nulle ennuyeuse en touchant le langage de développement. Je pense qu'il est normal de voir l'existence d'objets nuls, mais honnêtement, je pense qu'il est difficile à emballer même si vous regardez auto_ptr de C ++ / stl et Optional de java. Dans de telles circonstances, je suis très heureux d'essayer d'éliminer null au niveau de la langue comme kotlin.

Donc, j'aimerais réfléchir à la façon d'écrire du code qui ne rencontre pas null, donc j'écrirai ce qui me tient à cœur pour le moment

** Pourquoi détestez-vous null? ** **

La partie la moins appréciée de null est if (null === Je pense que le contexte est décrit comme un contexte qui n'a rien à voir avec la logique métier. Par conséquent, je pense à la beauté des différentes personnes qui ne peuvent être résumées que dans la logique métier.

** Cas d'emballage comme méthode courante d'évitement de null **

Tout d'abord, essayez de collecter des méthodes générales d'évitement nul pour autant que vous le souhaitez

*** Valeur de retour de la collection ***

*** Il n'est pas nécessaire d'effectuer une vérification nulle comme l'instruction if, il n'y a donc aucun sentiment d'inconfort dans la logique métier *** List/Array/Map En SQL etc., s'il n'y a pas de données lors de l'obtention du résultat, null peut être retourné. En utilisant List, Array, etc. comme valeur de retour, le contrôle nul peut être éliminé ou le nombre d'éléments peut être vérifié.

*** Facultatif *** et *** std :: auto_ptr ***

*** Au lieu d'un contrôle nul, un traitement de substitution est inséré, mais une valeur de substitution peut être entrée dans une instruction, de sorte que le sentiment d'inconfort dans la logique métier est atténué *** std::auto_ptr En C / C ++, l'opérateur opérateur peut être utilisé, il peut donc être utilisé sans gêne en fonction de l'application.

 int* pint = ptr.get();
```Etc., il y a un problème d'appropriation etc. et il faut faire attention à la méthode de mise en œuvre

[Optional](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Optional.html)
 Même si je veux utiliser un objet, il me semble étrange d'appeler une méthode car elle est encapsulée.
 J'ai entendu dire qu'il est toujours utilisé uniquement comme valeur de retour, mais je pense qu'il est difficile de le recevoir comme valeur de retour et de l'attribuer à nouveau.

## *** Mono / Flux réactif ***
 *** Il n'est pas nécessaire d'effectuer une vérification nulle comme l'instruction if, donc il n'y a pas d'inconfort dans la logique métier ***
 [mono](http://projectreactor.io/docs/core/release/reference/#mono)
 Il dit "Émettez un élément au maximum", mais il l'enveloppe intentionnellement avec seulement 0 .. 1.
 [flux](http://projectreactor.io/docs/core/release/reference/#flux)
 Il dit "0 à N éléments" et représente intentionnellement 0 .. N.

# ** Cas où les conditions nulles ne sont pas décrites, comme NullObject **
## *** Existence d'exception et try / catch ***
 Récemment, en utilisant exception et try / catch, les erreurs de segmentation causées par des points nuls ont disparu, donc on peut dire que vous n'avez pas à vous soucier des objets nuls.

## *** S'il n'y a pas d'exception ***
 Lorsque la vérification NULL n'est pas effectuée, des fuites de mémoire se produisent fréquemment et peuvent provoquer un comportement involontaire.
 Par conséquent, il est nécessaire d'effectuer une gestion des erreurs appropriée après la vérification de null.

 ***null object***
 Lors du retour d'un objet, le retour d'un type (nul) autre que object entraînera une branche involontaire, mais si un seul objet est renvoyé, la logique peut se dérouler sans heurts.
 Cependant, comme il est nécessaire de renvoyer un comportement ou une exception dans toutes les méthodes, il peut être plus simple de lancer une exception NullPointerException normalement de nos jours sur le principe de try / catch.


Recommended Posts

À propos de la gestion de Null
À propos de la description de Docker-compose.yml
À propos du comportement de ruby Hash # ==
À propos des bases du développement Android
À propos de la gestion des erreurs de la fonction de commentaire
À propos du rôle de la méthode initialize
Pensez aux 7 règles d'Optionnel
À propos du niveau de journalisation de java.util.logging.Logger
À propos de la gestion des exceptions
À propos de la gestion des exceptions
Qu'est-ce qu'un test? ・ À propos de l'importance d'un test
À propos du fonctionnement de next () et nextLine ()
À propos de la méthode
À propos de l'affichage initial de Spring Framework
À propos du traitement de BigDecimal (avec réflexion)
À propos du nombre de threads de Completable Future
À propos du paquet
[Java] Gestion des Java Beans dans la chaîne de méthodes
Pensez à la combinaison de Servlet et Ajax
À propos du guide de démarrage officiel de Spring Framework
A propos de l'ordre de description des propriétés système Java
À propos de l'idée des classes anonymes en Java
À propos de next () et nextLine () de la classe Scanner
Sortie sur la méthode, partie 2
À propos de la classe StringBuilder
Le monde de Clara-Rules (2)
Commentaire: à propos de l'interface
À propos de la gestion des exceptions Ruby
À propos de disconnect () de HttpURLConnection
À propos du pipeline d'actifs
À propos de la double fonction -java
À propos de la sélection d'OpenJDK
À propos de DI of Spring ①
À propos de l'opérateur ternaire
Jugement du calendrier
Le monde de Clara-Rules (4)
Le monde de Clara-Rules (1)
null spécifie le type
À propos de DI of Spring ②
Le monde de Clara-Rules (3)
À propos de la méthode de longueur
À propos du module Kernel
Le monde de Clara-Rules (5)
L'idée du tri rapide
À propos de la méthode cartographique
À propos de la méthode des ancêtres
À propos de form. ○○ de form_with
[Sortie] À propos de la base de données
À propos de la méthode to_s.
L'idée de jQuery
[Grails] À propos de la zone de paramétrage et des éléments de paramétrage de application.yml
À propos de l'utilité des monades dans une perspective orientée objet
Parler des mérites des variables de liaison de base de données ((1) Introduction)
À propos du problème de blocage dans le traitement parallèle dans la version 4.0 de gem'sprockets