[JAVA] Comparaison des types sûrs à tolérance nulle, à tolérance nulle et à tolérance nulle du point de vue de la sécurité nulle

Préface

Préface 1

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.

Préface 2

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.

Objectif de cet article

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.

null Trois types liés à la sécurité

1. type nul non autorisé [^ 1]

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

2. type non sécurisé tolérant nul [^ 1]

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

3. type sûr tolérant nul [^ 1]

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

Tableau de comparaison

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é

Type nul et tolérant nul du point de vue des spécifications de langage

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

Tendances des types de langue par défaut

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.

Qu'est-ce que la sécurité nulle que j'ai beaucoup entendu ces derniers temps?

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.

Liens connexes

[^ 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

Comparaison des types sûrs à tolérance nulle, à tolérance nulle et à tolérance nulle du point de vue de la sécurité nulle
Langage Java du point de vue de Kotlin et C #
ArrayList et le rôle de l'interface vu depuis List
Volume 3 types de Docker Compose considérés à partir de l'objectif
Comment écrire Scala du point de vue de Java
La comparaison d'énumération est ==, et equals est bonne [Java]
À propos de l'utilité des monades dans une perspective orientée objet
J'ai résumé les types et les bases des exceptions Java
Comparaison équivalente de la classe wrapper Java et du type primitif
[Sécurité Null] Mémo de comparaison Kotlin Java Utilisation correcte de la sécurité Null
Je vais expliquer la différence entre le développement d'applications Android et le développement d'applications iOS du point de vue des ingénieurs iOS
À propos de la gestion de Null
Résumons la grammaire Java 8 du point de vue des ingénieurs iOS