[JAVA] Vergleich von null-toleranten, null-toleranten und null-toleranten sicheren Typen aus der Perspektive der Null-Sicherheit

Vorwort

Vorwort 1

Dieser Artikel ist stark von den folgenden Artikeln beeinflusst.

Ich habe diesen Artikel geschrieben, um die oben beschriebene Nullsicherheit aus einem etwas anderen Blickwinkel zu organisieren. Wenn Sie jedoch den obigen Artikel verstehen, kann der folgende Inhalt ein Slapstick sein.

Vorwort 2

Der Name des Konzepts, das null entspricht, unterscheidet sich je nach Sprache geringfügig (Beispiel: Scala → None, Swift → nil), wird jedoch im Folgenden als null geschrieben.

Zweck dieses Artikels

Im Folgenden werden drei Typen definiert und beschrieben, die sich auf die Nullsicherheit beziehen, um ein allgemeines Verständnis der Nullsicherheit zu ermöglichen.

null Drei Arten im Zusammenhang mit Sicherheit

1. null nicht zulässiger Typ [^ 1]

Es hat die folgenden Funktionen:

Dies umfasst primitive Java-Typen, TypeScript-Standardtypen usw.

int a = 10;   // OK
int b = null; //Kompilierungsfehler
a: string = 1;    // OK
b: string = null; //Kompilierungsfehler

2. null toleranter unsicherer Typ [^ 1]

Es hat die folgenden Funktionen:

Dies schließt Java-Referenztypen ein.

MyClass a = new MyClass(); // OK
MyClass b = null;          //Dies ist auch in Ordnung
a.method1(); // OK
b.method1(); //NullPointerException tritt auf

3. null toleranter sicherer Typ [^ 1]

Es hat die folgenden Funktionen:

Dazu gehören der null-tolerante Typ von Kotlin und der null-gemeinsam genutzte Typ von TypeScript.

val a: String? = 1          // OK
val b: String? = null       // OK
b.length                    //Kompilierungsfehler
if (b != null) { b.length } // OK

Vergleichstabelle

Modellname Erlaube null Ohne Nullprüfung
Zugriff auf Attribute und Methoden
Laufzeitausnahme
Eintrittsgefahr
Typisches Beispiel
null inakzeptabler Typ TU es nicht n/a Abwesend Java primitive Typen
TypeScript
null toleranter unsicherer Typ Machen es kann Gibt es Java, C#Referenztyp
null toleranter sicherer Typ Machen Kann nicht Abwesend Kotlins nullbarer Typ
TypeScript null freigegebener Typ

Null- und Null-toleranter Typ aus Sicht der Sprachspezifikationen

Null wird normalerweise speziell in der Sprachspezifikation behandelt. Dies liegt daran, dass es für ein Sprachverarbeitungssystem am natürlichsten ist, nur die Zuweisung von Werten des deklarierten Typs (dh des nicht zulässigen Nulltyps) zuzulassen. Es kann gesagt werden, dass [^ 2], das es wagt, den null-toleranten Typ als Sprachstandard zu implementieren, eine Erweiterung ist, die die Bequemlichkeit des Programmierers berücksichtigt. In Scala und Haskell wird null als nur ein Wert oder Typ ausgedrückt, indem die Typhierarchie festgelegt wird. Auf diese Weise muss Null nicht speziell in den Sprachspezifikationen behandelt werden.

[^ 2]: Der Sprachstandard ist selektiv wie ein null-toleranter Typ, wenn er wie gewohnt wie TypeScript deklariert wird, und ein null-toleranter Typ, wenn er mit union als null deklariert wird. Weil wir auch liefern können

[^ 3]: Die erste Person, die dies tat, war übrigens [Antony Hoa \ -Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%B3%E3% 83% 88% E3% 83% 8B% E3% 83% BC% E3% 83% BB% E3% 83% 9B% E3% 83% BC% E3% 82% A2), und später waren dies 100 Milliarden Yen Sagt, es ist ein Fehler

Trends beim Standardtyp der Sprache

Bis etwa 2012 war der nulltolerante unsichere Typ in vielen Industriesprachen der Standardtyp. C, C ++, C #, Java, Objective-C usw. Aufgrund der weit verbreiteten Erkenntnis der Gefahren der Verwendung von nulltoleranten und unsicheren Typen wurde um 2012 eine Sprache entwickelt, in der der Standardtyp nulltolerant und sicher war und sich allmählich verbreitete. .. Typische Beispiele sind Kotlin, Swift, TypeScript usw.

Was ist Null-Sicherheit, die ich in letzter Zeit oft gehört habe?

Die kurze Antwort besteht darin, die Verwendung des null-toleranten unsicheren Typs einzustellen und das Risiko von Ausnahmen auszuschließen. In Java, Objective-C, C # usw. ist es jedoch unmöglich, den nullbaren und den unsicheren Typ nicht zu verwenden, da der Sprachstandardtyp der nullbare und unsichere Typ ist. Ab 2019 wird daher auf Sprachen wie Kotlin, Swift und TypeScript umgestellt, bei denen der Standardtyp der Sprache nulltolerant und sicher ist.

ähnliche Links

[^ 1]: Da es in allen Programmiersprachen keinen einheitlichen Namen gibt, werden wir ihn in diesem Artikel vorläufig so nennen. Bitte lassen Sie mich wissen, wenn Sie einen kanonischeren Namen haben.

Recommended Posts

Vergleich von null-toleranten, null-toleranten und null-toleranten sicheren Typen aus der Perspektive der Null-Sicherheit
Java-Sprache aus der Sicht von Kotlin und C #
ArrayList und die Rolle der Schnittstelle aus List
Band 3 Arten von Docker Compose aus dem Zweck betrachtet
Wie schreibe ich Scala aus der Perspektive von Java
Der Vergleich von enum ist == und gleich ist gut [Java]
Über die Nützlichkeit von Monaden aus einer objektorientierten Perspektive
Ich habe die Typen und Grundlagen von Java-Ausnahmen zusammengefasst
Äquivalenter Vergleich von Java-Wrapper-Klasse und primitivem Typ
[Null-Sicherheit] Kotlin Java-Vergleichsnotiz Richtige Verwendung der Null-Sicherheit
Ich werde den Unterschied zwischen der Entwicklung von Android-Anwendungen und der Entwicklung von iOS-Anwendungen aus der Sicht von iOS-Ingenieuren erläutern
Über den Umgang mit Null
Lassen Sie uns die Java 8-Grammatik aus der Sicht der iOS-Ingenieure zusammenfassen