Wie man modernes Java schreibt. Unveränderliches Java, Null Betrachten Sie die Sicherheit.

Java 8 wurde auch mit einem Mechanismus angepasst, mit dem Sie moderne Programmierung schreiben können, indem Sie Stream-Verarbeitung, Lambda, optionale Typen usw. in Java 8 hinzufügen. Aber durchdringen Java-Programmierer eine moderne Implementierungskultur?

Dieses Mal werde ich über "Immutable Programming" und "Handling of Null" als moderne Implementierungsmethode schreiben.

Annahme

Dies ist bei der Implementierung eines Webanwendungsservers vorgesehen. Natürlich gibt es viele Teile, die auch bei der nativen Implementierung angewendet werden. Ich werde erklären, wie man Java 8 schreibt.

Was ist unveränderliche Programmierung?

Ganz einfach, es wird nicht neu zugewiesen. Es ist wie beim Programmieren mit allen Finals.

Können Leute, die es noch nicht getan haben, das tun? Möglicherweise haben Sie das Gefühl, aber in den meisten Fällen müssen Webanwendungen nicht neu zugewiesen werden. Da die HTTP-Verarbeitung des Browsers 1 Anfrage 1 Antwort ist, Sie können sich das als Konvertieren (Anfrage) -> Antwort vorstellen. Außerdem ist der Ort zum Verwalten des Status auf Sitzung und Datenbank beschränkt. Mit anderen Worten, ich denke, dass die meisten von ihnen durch Konvertierungsverarbeitung mit Karte der Stream-Verarbeitung beschrieben werden können.

In jüngster Zeit gibt es einen Trend, die Infrastruktur unveränderlich zu machen, und auch die unveränderliche Infrastruktur zieht Aufmerksamkeit auf sich. Es kann als Beweis dafür angesehen werden, dass die Vorteile der Unveränderlichkeit als groß angesehen werden.

Vorteile der unveränderlichen Programmierung

Der Wert des Objekts ändert sich nach seiner Erstellung nicht mehr. Mit anderen Worten, was Sie als Methodenargument usw. erhalten, wird auch dann nicht geändert, wenn Sie eine andere Verarbeitung durchlaufen, sodass das Debuggen einfacher ist und der Code besser sichtbar ist.

Dies liegt daran, dass unbekannte Variablen, wie z. B. das, was nach dem Aufrufen der Methode übergeben wurde, und der Inhalt der Instanz nicht neu geschrieben werden und die einzige neue Änderung die als Rückgabewert empfangene Variable ist.

Nachteile der unveränderlichen Programmierung

Man kann sagen, dass die Leistung schlecht ist und die Speichereffizienz aufgrund der Neuerstellung der gesamten Instanz verringert wird, um eine Variable im Objekt der Klasse zu ändern. In Anbetracht der aktuellen Serverspezifikationen ist es jedoch besser als jemand, der auf einen Fehler treten und Zeit damit verbringen kann, ihn zu untersuchen und zu beheben, oder die menschlichen Kosten für das Verständnis und die Bearbeitung des Codes in einem weiten Bereich beim Hinzufügen einer Funktion aufschreiben kann. In den meisten Fällen können die Endkosten durch Verbesserung reduziert werden.

Wenn die Leistung zu einem Problem wird, ist es realistischer, nur diesen Teil zu beheben. Selbst wenn zu einer Logik gewechselt wird, die die Leistung berücksichtigt, ist der Umfang genau definiert, sodass es häufig möglich ist, ihn sauber zu beheben.

Denkweise der Praxis

Grundsätzlich wird der Konvertierungsprozess wie bei der Stream Map wiederholt.

Objekterstellung

Die Grundidee besteht darin, das Objekt vom Moment seiner Geburt an perfekt nutzbar zu machen. Dazu müssen Sie alle Parameter übergeben, damit das Objekt im Konstruktor vorhanden ist.

Java hat eine schlechte Spezifikation namens JavaBeans (aus unveränderlicher Sicht). Es gibt einen Setter, der jedoch nur mit Bibliotheken verwendet werden sollte, die gemäß der Java Beans-Spezifikation arbeiten. (In letzter Zeit können mehr Bibliotheken in private Parameter geschrieben werden.) Das Festlegen nach dem Neuausführen erstellt ein instabiles Objekt zwischen Neuem und Festlegen. Die Tatsache, dass es eine festgelegte Methode gibt, bedeutet auch nicht, dass eine Methode welchen Wert zu welchem Zeitpunkt festlegt. Nur ein Setter erweitert den Umfang des Debuggens.

Einführung von Lombok als Tool und Bibliothek zur Förderung von unveränderlichem Java

Wenn Sie in Qiia danach suchen, gibt es viele Leute, die technische Verwendung schreiben, daher überlasse ich die detaillierte Einrichtung und Verwendung dieser und schreibe nur den Fall, wenn ich sie mit der Idee von Unveränderlich verwende.

val Typ

Es macht Typinferenz und macht es zu einer Variablen, die nicht automatisch geändert werden kann! Unveränderlicher Gott!

val x = "hogehoge";

Getter Annotation

Fügen Sie automatisch Getter für Feldvariablen hinzu.

class Hoge {
   @Getter
   private Integer id;

   @Getter
   private String name;
}

AllArgsConstructor-Annotation

Generieren Sie automatisch einen Konstruktor, der alle Feldvariablen als Argumente verwendet.

@AllArgsConstructor
class Hoge {
   private Integer id;
   private String name;
}

RequiredArgsConstructor-Annotation

Fügen Sie eine statische Methode hinzu, um eine Instanz zu erstellen.

@RequiredArgsConstructor(staticName="of")
class Hoge {
   private Integer id;
   private String name;
}

Integer id = 1;
String name = "Jojo";
Hoge obj = Hoge.of(id, name)

Wertanmerkung

Sie können den Effekt erzielen, indem Sie die Anmerkungen @Getter und @AllArgsConstructor zusammenfügen.

Fazit

Es ist in Ordnung, wenn Sie alle Werte verwenden, die es nicht ersetzbar machen.

Über den Umgang mit Null

Ab hier ändert sich die Geschichte vollständig und wird als null behandelt. Ich denke, dass das Programmieren in modernen Programmiersprachen alltäglich wird und die Existenz und Nichtexistenz von Werten klar zum Ausdruck bringt.

Dies wird in diesem Artikel ausführlich erläutert. Wenn Sie mehr wissen möchten, lesen Sie bitte den Artikel.

Null unsichere Sprachen sind keine Legacy-Sprachen mehr

Vorteile des Ausdrucks im Code, dass ein Null-Fall vorliegt

Das Beste, was ich mir vorstellen kann, ist, dass Sie in Ihrem Code klar ausdrücken können, ob die Variable immer einen Wert oder keinen Wert hat (Nullfall).

Optional wurde Java 8 eingeführt. Infolgedessen ist der Fall, der immer einen Wert hat, vom gleichen Typ. Wenn es einen Fall gibt, in dem kein Wert vorhanden ist, kann er als Zustand ausgedrückt werden, in dem der Wert in Optional enthalten ist.

In der Spalte der DB-Tabelle kann Nicht-Null so ausgedrückt werden, wie es ist, und wenn Null möglich ist, kann es im Quellcode mit Optional [Spaltentyp] ausgedrückt werden. Und Sie können die Verarbeitung von Fällen erzwingen, in denen kein Wert vorhanden ist.

Wenn Sie diese Programmierung beherrschen, erhalten Sie fast nie eine NullPointerException.

Leider habe ich das Gefühl, dass es nicht genügend Funktionen gibt, um intelligent zu schreiben.

JDK9 Optional

Methoden werden für Flexibilität hinzugefügt. Ich warte persönlich.

ifPresentOrElse-Methode

Mit der aktuellen Option gibt es nur eine Möglichkeit, den Prozess der Sicherheitsüberprüfung und den Prozess des Extrahierens zu trennen.

Optional o = something;

if(o.isPresent()) {
  //Verarbeitung bei Eingabe eines Wertes
  Hoge hoge = o.get(); // <- o.get()Ist nicht sicher! !! !!
} else {
 //Verarbeitung, wenn kein Wert vorhanden ist
}

Persönlich möchte ich, dass die optionale get-Methode grundsätzlich unbrauchbar ist. Warum wird es in Optional eingeschlossen, wenn ich keine orElse-Methode schreiben muss? Offensichtlich sind die Erklärungen und Spezifikationen falsch.

Aber! Ich kann mit Java 8 nicht klug schreiben. .. traurig.

Jedoch! In Java9 können Sie so schreiben!

Optional o = something;

o.ifPresentOrElse(
  hoge  ->{
     //Verarbeitung, wenn ein Wert vorhanden ist
     print("this is " + hoge)
  },
    () ->{
     //Verarbeitung, wenn kein Wert vorhanden ist
     print("none")
  }
);

Stream-Methode

Nur wenn der Wert Optional vorhanden ist, wird der Wert an die nachfolgende Verarbeitung übergeben, z. B. map! Dies ist sicher in der Lage, den Prozess auf intelligente Weise zu beschreiben!

Für diejenigen unter Ihnen, die nicht auf Java 9 warten können.

Nach dem Studium von Scala sind die Ideen der funktionalen Programmierung und der unveränderlichen Programmierung allgegenwärtig, sodass Sie möglicherweise besseren Code schreiben können.

In jeder Sprache möchte ich gut für praktischen Code programmieren können, der stilvoll und künstlerisch ist und nicht nur funktioniert!

Schließlich

Ich möchte mehr über moderne Codierung erfahren. Wenn also jemand eine bessere Denkweise kennt, würde ich gerne von Ihnen hören.

Recommended Posts

Wie man modernes Java schreibt. Unveränderliches Java, Null Betrachten Sie die Sicherheit.
Wie schreibe ich einen Java-Kommentar
Java # 6 studieren (Wie man Blöcke schreibt)
So schreiben Sie eine Java-Variablendeklaration
[Einführung in Java] So schreiben Sie ein Java-Programm
[Java] Wie man Dateien ausgibt und schreibt!
Kotlins Null-Sicherheit zum Senden an Java-Entwickler
[Java] So testen Sie, ob es in JUnit null ist
Grundlagen der Java-Entwicklung ~ Schreiben von Programmen * Übung 1 ~
So verbergen Sie Nullfelder als Antwort in Java
[Java] Memo zum Schreiben der Quelle
Wie schreibe ich Java String # getBytes in Kotlin?
Wie schreibe ich Rails
Wie schreibe ich Docker-Compose
So schreiben Sie eine Migrationsdatei
Wie schreibe ich Scala aus der Perspektive von Java
[Java] Arten von Kommentaren und wie man sie schreibt
java: Wie schreibe ich eine generische Typliste? [Hinweis]
So senken Sie die Java-Version
[Java] Verwendung von Map
Wie man guten Code schreibt
Java - So erstellen Sie JTable
Verwendung von Java Optional
So minimieren Sie Java-Images
[Refactoring] So schreiben Sie Routing
Verwendung der Java-Klasse
[Java] So zeigen Sie Wingdings an
Verwendung von Java Map
So legen Sie Java-Konstanten fest
Wie schreibe ich Junit 5 organisiert
Wie schreibe ich Rails Seed
Verwendung von Java-Variablen
So konvertieren Sie Java Base
Wie schreibe ich Rails Routing
[Java] So implementieren Sie Multithreading
So initialisieren Sie ein Java-Array
Vergleich des Schreibens von Callback-Funktionen (Java, JavaScript, Ruby)
Schreiben und Notizen bei der Migration von VB zu JAVA
So erstellen Sie einen Java-Container
So zerlegen Sie eine Java-Klassendatei
Verwendung von HttpClient (Post) von Java
[Java] Verwendung der Join-Methode
Wie man JAVA in 7 Tagen lernt
[Verarbeitung × Java] Verwendung von Variablen
So dekompilieren Sie eine Java-Klassendatei
[Rails] Wie schreibe ich eine Ausnahmebehandlung?
[JavaFX] [Java8] Verwendung von GridPane