50 votes

Affectation explicite de null

chaîne s1 ;
chaîne s2 = null ;

si (s1 == null) // erreur de compilation
si (s2 == null) // ok

Je ne comprends pas vraiment pourquoi l'assignation explicite est nécessaire. Quelle est la différence entre une variable nulle et une variable non affectée ? J'ai toujours supposé que les variables non affectées étaient simplement assignées comme nulles par le runtime/le compilateur de toute façon. Si elles ne sont pas nulles, alors qu'est-ce qu'elles sont ?

73voto

Mark Byers Points 318575

Les membres non affectés sont automatiquement initialisés à leurs valeurs par défaut (qui est la référence nulle dans le cas de chaîne de caractères).

Les variables locales non affectées ne se voient attribuer aucune valeur et essayer d'accéder à une variable potentiellement non affectée entraînera une erreur de compilation.

12voto

Tseng Points 2687

La raison pour laquelle une affectation explicite est requise est assez simple. C'est souvent une source d'erreurs lorsque les gens essaient d'utiliser des variables non assignées/non initialisées.

En obligeant le développeur à le faire, cela élimine les erreurs qui se produisent lorsque le développeur oublie d'initialiser la variable. Et en l'initialisant, vous avez le contrôle dessus.

C'est vraiment une bonne chose! Je ne sais pas combien de fois j'ai eu des variables non initialisées ou indéfinies dans certains langages de script qui ont pris un certain temps à être trouvées ^^

7voto

Jon Hanna Points 40291
  1. Si vous avez une valeur locale non affectée, vous faites probablement quelque chose de stupide. Le pire, c'est que vous faites ce genre de chose stupide que les gens intelligents peuvent faire dans l'excitation du moment (tout le monde fait quelque chose de stupide chaque jour).

  2. Contrairement à certaines choses qui entraînent des avertissements, il n'y a aucun avantage à utiliser une valeur non affectée dans un cas particulièrement remarquable.

  3. La seule différence de coût entre autoriser une variable locale non affectée ou supposer une valeur particulière, ce sont quelques frappes de touche (normalement = null; au maximum, cela pourrait être = default(SomeType);)

Interdire de tels constructions comporte de nombreux avantages et peu d'inconvénients. Il n'y a aucune raison technique pour laquelle le langage n'aurait pas pu être conçu pour autoriser des variables non affectées, mais les avantages de l'interdiction l'emportent sur les inconvénients.

4voto

Daniel Daranas Points 15123

Le compilateur C# ne permet pas l'utilisation de variables locales non initialisées. Une variable initialement non assignée n'a pas de valeur initiale.

4voto

tanascius Points 22712

Jetez un œil à la spécification : 5.3 Attribution définitive

L'attribution définitive est une exigence dans les contextes suivants :
Une variable doit être définitivement attribuée à chaque emplacement où sa valeur est obtenue.

s1 et s2 sont initialement non attribués (5.3.1 Variables initialement attribuées), mais seul s2 est considéré comme définitivement attribué à un emplacement donné, [parce que] tous les chemins d'exécution possibles menant à cet emplacement contiennent au moins l'un des éléments suivants :

  • Une affectation simple (Section 7.13.1) dans laquelle la variable est l'opérande de gauche.

Comme vous pouvez le constater, null est sans importance dans ce contexte. L'important est l'affectation elle-même, mais pas la valeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X