[JAVA] Über den Umgang mit Null

Ich denke, dass viele Leute den Null-Check beim Berühren der Entwicklungssprache als störend empfinden. Ich denke, es ist normal, die Existenz von Nullobjekten zu sehen, aber ehrlich gesagt finde ich es umständlich zu wickeln, selbst wenn man sich auto_ptr von C ++ / stl und Optional von Java ansieht. Unter solchen Umständen bin ich sehr glücklich zu versuchen, Null auf Sprachebene wie Kotlin zu eliminieren.

Daher möchte ich überlegen, wie Code geschrieben werden soll, der nicht auf Null stößt. Daher werde ich aufschreiben, was mir vorerst wichtig ist

** Warum hasst du null? ** ** **

Der unbeliebteste Teil von null ist if (null === Ich denke, dass der Kontext als ein Kontext beschrieben wird, der nichts mit Geschäftslogik zu tun hat. Daher denke ich darüber nach, wie schön verschiedene Menschen nur in der Geschäftslogik zusammengefasst werden können.

** Umhüllungsfall als übliche Methode zur Vermeidung von Nullen **

Versuchen Sie zunächst, allgemeine Null-Vermeidungsmethoden zu sammeln, soweit Sie interessiert sind

*** Rückgabewert der Sammlung ***

*** Es ist nicht erforderlich, eine Nullprüfung wie die if-Anweisung durchzuführen, sodass die Geschäftslogik nicht unangenehm ist *** List/Array/Map Wenn in SQL usw. beim Abrufen des Ergebnisses keine Daten vorhanden sind, kann null zurückgegeben werden. Durch die Verwendung von Liste, Array usw. als Rückgabewert kann die Nullprüfung beseitigt oder die Anzahl der Elemente überprüft werden.

*** Optional *** und *** std :: auto_ptr ***

*** Anstelle der Nullprüfung wird eine Ersatzverarbeitung eingefügt, aber der Ersatzwert kann in eine Anweisung eingegeben werden, sodass das Gefühl von Unbehagen in der Geschäftslogik verringert wird. *** std::auto_ptr In C / C ++ kann der Operator Operator verwendet werden, sodass er je nach Anwendung problemlos verwendet werden kann.

 int* pint = ptr.get();
```Usw. haben Probleme mit dem Besitz, daher müssen Sie vorsichtig sein, wie Sie sie implementieren.

[Optional](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Optional.html)
 Obwohl ich ein Objekt verwenden möchte, fühlt es sich seltsam an, eine Methode aufzurufen, weil sie verpackt ist.
 Ich habe gehört, dass es immer nur als Rückgabewert verwendet wird, aber ich finde es umständlich, es als Rückgabewert zu erhalten und neu zuzuweisen.

## *** Reaktives Mono / Flussmittel ***
 *** Es ist nicht erforderlich, eine Nullprüfung wie die if-Anweisung durchzuführen, sodass die Geschäftslogik möglicherweise nicht unangenehm ist ***
 [mono](http://projectreactor.io/docs/core/release/reference/#mono)
 Es heißt "höchstens einen Artikel ausgeben", aber absichtlich wird nur mit 0 .. 1 verpackt.
 [flux](http://projectreactor.io/docs/core/release/reference/#flux)
 Es sagt "0 bis N Elemente" und repräsentiert absichtlich 0 .. N.

# ** Fälle, in denen keine Nullbedingungen beschrieben werden, wie z. B. NullObject **
## *** Existenz einer Ausnahme und versuchen / fangen ***
 In letzter Zeit sind durch die Verwendung von Ausnahme und try / catch Segmentierungsfehler, die durch Nullpunkte verursacht wurden, verschwunden, sodass Sie sich keine Gedanken über Nullobjekte machen müssen.

## *** Wenn es keine Ausnahme gibt ***
 Wenn keine Nullprüfung durchgeführt wird, treten häufig Speicherverluste auf, die zu unbeabsichtigtem Verhalten führen können.
 Daher ist es erforderlich, nach der Nullprüfung eine entsprechende Fehlerbehandlung durchzuführen.

 ***null object***
 Wenn Sie ein Objekt zurückgeben, führt die Rückgabe eines anderen Typs (null) als object zu einer unbeabsichtigten Verzweigung. Wenn jedoch ein einzelnes Objekt zurückgegeben wird, kann die Logik reibungslos ablaufen.
 Da es jedoch erforderlich ist, bei allen Methoden ein Verhalten oder eine Ausnahme zurückzugeben, kann es heutzutage einfacher sein, eine NullPointerException normalerweise unter der Voraussetzung von try / catch auszulösen.


Recommended Posts

Über den Umgang mit Null
Informationen zur Beschreibung von Docker-compose.yml
Über das Verhalten von Ruby Hash # ==
Über die Grundlagen der Android-Entwicklung
Informationen zur Fehlerbehandlung der Kommentarfunktion
Informationen zur Rolle der Initialisierungsmethode
Denken Sie an die 7 Regeln von Optional
Informationen zur Protokollebene von java.util.logging.Logger
Informationen zur Ausnahmebehandlung
Informationen zur Ausnahmebehandlung
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
Informationen zur Funktionsweise von next () und nextLine ()
Über die Methode
Informationen zur ersten Anzeige von Spring Framework
Über die Behandlung von BigDecimal (mit Reflexion)
Über die Anzahl der Threads von Completable Future
Über das Paket
[Java] Behandlung von Java Beans in der Methodenkette
Denken Sie an die Kombination von Servlet und Ajax
Über den offiziellen Startleitfaden für Spring Framework
Informationen zur Beschreibungsreihenfolge der Java-Systemeigenschaften
Über die Idee anonymer Klassen in Java
Informationen zu next () und nextLine () der Scannerklasse
Ausgabe über die Methode, Teil 2
Informationen zur StringBuilder-Klasse
Die Welt der Clara-Regeln (2)
Kommentar: Über die Schnittstelle
Informationen zur Behandlung von Ruby-Ausnahmen
Informationen zum Trennen () von HttpURLConnection
Über die Asset-Pipeline
Über die Doppelfunktion -java
Über die Auswahl von OpenJDK
Über DI des Frühlings ①
Über den ternären Operator
Beurteilung des Kalenders
Die Welt der Clara-Regeln (4)
Die Welt der Clara-Regeln (1)
null gibt den Typ an
Über DI des Frühlings ②
Die Welt der Clara-Regeln (3)
Über die Längenmethode
Informationen zum Kernel-Modul
Die Welt der Clara-Regeln (5)
Die Idee der schnellen Sortierung
Über die Kartenmethode
Über die Ahnenmethode
Informationen zum Formular. ○○ von form_with
[Ausgabe] Informationen zur Datenbank
Informationen zur to_s-Methode.
Die Idee von jQuery
[Grails] Über den Einstellungsbereich und die Einstellungselemente von application.yml
Über die Nützlichkeit von Monaden aus einer objektorientierten Perspektive
Über die Vorzüge von Datenbankbindungsvariablen sprechen ((1) Einführung)
Über das Problem des Deadlocks bei der Parallelverarbeitung in gem'sprockets '4.0