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.
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.
Im Folgenden werden drei Typen definiert und beschrieben, die sich auf die Nullsicherheit beziehen, um ein allgemeines Verständnis der Nullsicherheit zu ermöglichen.
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
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
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
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 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
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.
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.
[^ 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