Les chaînes vides et les nulles sont fondamentalement différentes. Un null est l'absence d'une valeur et une chaîne vide est une valeur qui est vide.
Le langage de programmation qui fait des suppositions sur la "valeur" d'une variable, dans ce cas une chaîne vide, sera aussi bien que d'initialiser la chaîne avec toute autre valeur qui ne causera pas de problème de référence nulle.
De plus, si vous transmettez le gestionnaire de cette variable chaîne à d'autres parties de l'application, ce code n'aura aucun moyen de valider si vous avez intentionnellement transmis une valeur vide ou si vous avez oublié de remplir la valeur de cette variable.
Un autre cas où cela peut poser problème est celui où la chaîne est une valeur de retour d'une fonction. Puisque la chaîne est un type de référence et qu'elle peut techniquement avoir une valeur nulle ou vide, la fonction peut aussi techniquement retourner une valeur nulle ou vide (rien ne l'empêche de le faire). Maintenant, puisqu'il y a 2 notions de "l'absence de valeur", c'est-à-dire une chaîne vide et un null, tout le code qui consomme cette fonction devra faire 2 vérifications. Une pour empty et l'autre pour null.
En bref, il est toujours bon d'avoir une seule représentation pour un seul État. Pour une discussion plus large sur les vides et les nuls, voir les liens ci-dessous.
https://softwareengineering.stackexchange.com/questions/32578/sql-empty-string-vs-null-value
NULL vs Empty dans le traitement des entrées utilisateur
57 votes
Considérez-vous que c'est un problème pour autre les types de référence ?
21 votes
@JonSkeet Non, mais seulement parce que j'ai initialement, à tort, pensé que les chaînes de caractères sont des types de valeurs.
24 votes
@Marcel : C'est une assez bonne raison de s'interroger sur ce sujet.
7 votes
@JonSkeet Oui. Oh oui. (Mais vous n'êtes pas étranger à la discussion sur les types de référence non annulables )
7 votes
Je crois que vous vous en sortiriez beaucoup mieux si vous utilisiez des assertions sur vos chaînes aux endroits où vous vous attendez à ce qu'elles ne le soient PAS
null
(et aussi je vous recommande de traiter conceptuellementnull
et les chaînes vides comme des choses différentes). Une valeur nulle pourrait être le résultat d'une erreur quelque part, alors qu'une chaîne vide devrait avoir une signification différente.1 votes
Null commence à ne pas être très bien considéré. Voir ici, "Référence Null : l'erreur du milliard de dollars". qconlondon.com/londres-2009/présentation/ . Ou ici par la bibliothèque Guava de Google (en Java mais toujours pertinent) code.google.com/p/guava-libraries/wiki/
8 votes
@JohnCastle Je vous défie de demander aux développeurs de bases de données qui comprennent la valeur de l'état trinaire si vous pouvez leur prendre leurs nulls. La raison pour laquelle ce n'était pas bon était que les gens ne pensent pas en trinaire, c'est soit gauche ou droite, haut ou bas, oui ou non. L'algèbre relationnelle a besoin d'un état trinaire.