Cet article est fortement influencé par les articles suivants.
J'ai écrit cet article dans le but d'organiser la sécurité nulle comme décrit ci-dessus sous un angle légèrement différent, mais si vous comprenez l'article ci-dessus, le contenu suivant peut être un slapstick.
Le nom du concept correspondant à null est légèrement différent selon le langage (exemple: Scala → None, Swift → nil), mais dans ce qui suit, il s'écrit null.
Ce qui suit définit et décrit trois types liés à la sécurité nulle pour aider à une compréhension commune de la sécurité nulle.
Il présente les caractéristiques suivantes:
Cela inclut les types primitifs Java, les types par défaut TypeScript, etc.
int a = 10; // OK
int b = null; //Erreur de compilation
a: string = 1; // OK
b: string = null; //Erreur de compilation
Il présente les caractéristiques suivantes:
Cela inclut les types de référence Java.
MyClass a = new MyClass(); // OK
MyClass b = null; //C'est aussi OK
a.method1(); // OK
b.method1(); //NullPointerException se produit
Il présente les caractéristiques suivantes:
Ceux-ci incluent le type à tolérance nulle de Kotlin et le type à partage nul de TypeScript.
val a: String? = 1 // OK
val b: String? = null // OK
b.length //Erreur de compilation
if (b != null) { b.length } // OK
Nom du modèle | Permettre null | Sans contrôle nul Accéder aux attributs et méthodes |
Exception d'exécution Risque d'occurrence |
Exemple typique |
---|---|---|---|---|
type nul non acceptable | ne pas faire | n/a | Absent | Types primitifs Java TypeScript |
type unsafe tolérant nul | Faire | ça peut | y a-t-il | Java, C#Type de référence |
type sûr tolérant nul | Faire | Ne peux pas | Absent | Le type Nullable de Kotlin TypeScript nul type partagé |
Null est généralement traité spécialement dans la spécification du langage. En effet, il est plus naturel pour un système de traitement du langage d'autoriser l'affectation de seules valeurs du type déclaré (c'est-à-dire de type nul non autorisé). On peut dire que [^ 2], qui ose implémenter le type tolérant à zéro comme langage par défaut, est une extension considérant la commodité du programmeur. Dans Scala et Haskell, null est exprimé comme une seule valeur ou type en concevant la hiérarchie des types. De cette façon, il n'est pas nécessaire de traiter null spécialement dans les spécifications du langage.
[^ 2]: Le langage par défaut est sélectif comme un type à tolérance nulle lorsqu'il est déclaré comme d'habitude comme TypeScript, et un type à tolérance nulle lorsqu'il est déclaré prendre null à l'aide d'union. Parce que nous pouvons également fournir
[^ 3]: Au fait, la première chose que j'ai faite a été [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), et plus tard 100 milliards de yens Dit que c'est un échec
Jusque vers 2012, le type unsafe à tolérance nulle était le type par défaut dans de nombreux langages industriels. C, C ++, C #, Java, Objective-C, etc. Cependant, en raison de la reconnaissance généralisée des dangers liés à l'utilisation de types à tolérance nulle et non sécurisés, un langage a été développé vers 2012 dans lequel le type par défaut était tolérant à zéro et sûr, et s'est progressivement généralisé. .. Des exemples typiques sont Kotlin, Swift, TypeScript, etc.
La réponse courte est d'arrêter d'utiliser le type unsafe à tolérance nulle et d'éliminer le risque d'exécuter des exceptions. Cependant, en Java, Objective-C, C #, etc., il est impossible de ne pas utiliser le type nullable et unsafe car le type par défaut du langage est le type nullable et unsafe. Par conséquent, à partir de 2019, la transition vers des langages tels que Kotlin, Swift et TypeScript où le type de langage par défaut est tolérant à zéro et sûr est en cours.
[^ 1]: Puisqu'il n'y a pas de nom unifié dans les langages de programmation, nous l'appellerons provisoirement dans cet article. Veuillez me faire savoir si vous avez un nom plus canonique.
Recommended Posts