10
votes

Quel est le but de la chaîne vide?

Pour moi, en tant que développeur et en tant qu'utilisateur, je trouve la chaîne vide ("") inutile et la cause de beaucoup de confusion, c'est comme dire string == Char []

Peut-être que les ordinateurs ont besoin de la chaîne vide, alors j'aimerais apprendre pourquoi.

Voir aussi:


4 commentaires

Les ordinateurs, non, ils n'ont pas besoin de la corde vide conceptuellement. Mais certaines langues font. En Java, par exemple, il est parfois plus facile de travailler avec une chaîne vide que nécessaire avec une référence nulle. Dans la même veine, il est souvent plus facile de renvoyer une liste vide au lieu d'une référence null. Enlighting Lire sur le sujet: Joshua Bloch, dans "Java efficace" "," Retournez des tableaux de longueur zéro, pas des nulls ". Il est lié ​​à votre question.


@ Shog9: La question est étiquetée C # et Java. Java n'a pas de fonctions. Il a des méthodes. (Je ne sais pas pour C #). Pas que je ne suis pas d'accord avec le lien, simplement en utilisant la terminologie correcte.


Certaines méthodes sont des fonctions - certaines sont des procédures.


@Donroby Les procédures sont des fonctions qui renvoient nulle (c'est-à-dire rien)


8 Réponses :


9
votes

Parfois, vous avez besoin d'une valeur de chaîne qui n'est pas null si elle n'est pas peuplée. Sinon, pour une tâche liée à la chaîne donnée, vous devez inclure un chèque NULL qui sert simplement à blottrer à votre code.

et juste pour l'avoir à l'enregistrement, en C #, il est encouragé à spécifier String.empty au lieu de codage dur dans "".

EDIT: Et comme l'a souligné Lbushkin, il existe une différence entre avoir une valeur vide par rapport à une valeur inconnue.


2 commentaires

Je trouve intéressant que c # a la fonction string.isnullorempty (). Facilite le codage, mais facilite également la tâche de ne pas réfléchir par les ramifications de NULL / VIDE dans un cas particulier.


Cette fonction est certainement utile lorsque NULL ou vide peut être traité de la même manière. Dans d'autres situations, comme vous allez faire allusion, une valeur peut être correcte et l'autre peut être exceptionnelle.



31
votes

La chaîne vide est assez courante dans les situations du monde réel - et ils sont utiles à différencier de NULL. strong>

  • null signifie que la valeur est indéfinie ou inconnue. em> p> li>

  • une chaîne vide signifie qu'il est connu pour être rien (vide). em> p> li> ul>

    Cela peut sembler comme fractionnement de poils, mais il y a une différence. Les chaînes vides sont des instances d'un objet - NULLS ne sont pas. Vous pouvez manipuler une chaîne vide en utilisant l'une des méthodes valides pouvant être appelées objet de chaîne. Vous ne pouvez pas manipuler un null. Les chaînes vides sont souvent le résultat de certaines manipulations sur d'autres cordes, par exemple: p> xxx pré>

    Voici un exemple simple où ce qui précède montre: une application avec une forme qui recueille le milieu d'une personne Nom via une zone de texte. Si la valeur de la zone de texte soit nulle ou une chaîne vide? Il est beaucoup plus facile de toujours que la zone de texte retourne une chaîne vide comme valeur (quand vide) plutôt que d'essayer de différencier entre NULL et "". P>

    Fait intéressant, certaines bases de données ne font pas la différence entre la chaîne null et vide forte> - le meilleur exemple dont Oracle. Dans Oracle: P>

    INSERT into MYTABLE(name) VALUES('')
    


10 commentaires

Bon point sur la différence entre aucune valeur et une valeur inconnue. +1


NULL signifie seulement "non défini" si vous pensez que cela signifie indéfini. C'est plutôt comme Humpty Dumpty: "Les mots signifient ce que je décide qu'ils signifient". NULL signifie quel que soit votre programme avec NULL. C'est une convention commune nulle signifie "non défini" mais vous pourriez être surpris; Certains programmes peuvent interpréter "null" pour une chaîne pour signifier que la valeur doit être interprétée comme le numéro PI. Je ne recevrais pas de points de style pour un tel programme, mais vous seriez surpris de ce que vous trouvez dans le code.


Pouvez-vous donner un exemple dans lequel la chaîne vide représente les données connues de quelque chose? par exemple. Bonjour, je m'appelle ""


No Null signifie non défini à tout le monde, mais vous une autre personne qui écrit si x == null puis x = quelque chose;


@Ira Baxter: Il est vrai que NULL est souvent surchargé pour signifier différentes choses et il est en effet sensible au contexte. Cependant, il s'agit d'une pratique courante de traiter les valeurs nulles comme des inconnues et des non-nuls comme définissant une valeur spécifique. Défier ces règles de convention peut parfois être utile, mais confond souvent de futurs responsables du code.


@Max Toro: ma réponse humoristique serait la suivante: la chaîne la plus courte non nulle est "" , mais de côté, les chaînes vides sont des objets de chaîne valides qui n'ont tout simplement pas de texte (longueur). Ils peuvent être le résultat de nombreuses manipulations différentes sur les chaînes, par exemple: "Hello World" .Substring (0,0) -> "" . Si vous avez renvoyé NULL dans un tel cas, alors demandez la longueur du résultat lancerait un NullReferenceException . Ceci est généralement considéré comme indésirable, tant d'opérations résultant de chaînes de retour sans longueur string.empty pour simplifier le développement.


@Lbushkin: Je sais à quel point les cordes fonctionnent, je n'ai pas besoin de leçon, j'essaie simplement de trouver le sens ou le but des choses.


@Max Toro, exemple. Qu'avez-vous mangé pour le petit déjeuner? Avant la question, la réponse est inconnue. Nul. Si vous deviez répondre et dire de manière audible «rien», la représentation des données de celle-ci est la chaîne vide. Avant la question, la réponse est "la valeur n'est pas connue". Après la question (et la réponse), la valeur est EMTPY.


@Ira. est défini sur "valeur inconnue" ou simplement indéfini. Il est cependant souvent interprété comme une valeur spécifique, mais c'est quelque chose de très différent. Le non-défini est (A == NULL) retourne très souvent NULL nomère la valeur de A. Certaines langues (y incl. C # retournera vrai, mais c # ne peut pas retourner null dans une expression booléenne puisque Bool n'est pas nullable)


@Anthonypegram Bonjour à partir de 2019. Excellent exemple. Mais qu'en est-il du cas lorsque nous répondons audiblement "Je ne veux pas répondre à cette question"? Quel type de données ce sera: la chaîne vide, null ou quelque chose de différent?



6
votes

On pourrait affirmer que la chaîne vide est une instance du Modèle d'objet Null . Comme l'a souligné Anthony, il est utilisé pour éviter des cas spéciaux et beaucoup de si s.


1 commentaires

True, si dans de nombreux cas, la chaîne vide a une signification différente de NULL pour la logique commerciale que le code représente. Par exemple, le protocole que je travaille avec désigne des cordes vides comme cas lorsque le champ associé dans la base de données doit être effacé alors que la chaîne NULL signifie laisser ce champ seul. Bien que je voudrais admettre, ceci est une exception spéciale à la règle que vous donnez.



11
votes

Pourquoi avons-nous besoin de zéro? C'est vraiment la même question. Qu'est-ce que "pyjama" sans tous les A? "PJM". Qu'est-ce que "A" sans tous les A? "". Aussi simple que cela. Le produit de certaines opérations de chaîne est une chaîne sans caractères, et c'est la chaîne vide. Il se comporte comme n'importe quelle autre chaîne - vous pouvez facilement déterminer sa longueur; Vous pouvez le concaténer sur d'autres cordes, vous pouvez compter le A s'agitant, etc.


2 commentaires

Alors pourquoi ne pas utiliser de char [] au lieu de la chaîne?


Parce que Char [] est un type , pas une instance de chaîne.



2
votes

Il sert le même objectif pour les cordes que le nombre "zéro" sert pour les entiers. Si vous n'aviez pas de zéro, vous ne pouviez pas écrire le nombre de moutons que vous avez lorsque vous n'avez pas de mouton. De même, si vous n'avez pas la chaîne vide, vous ne pouvez pas écrire la SEQEUNCE de personnages que vous avez, lorsque vous n'avez pas de caractères.

Toutes sortes de lois algébriques analogues s'appliquent: comme x + 0 est La même chose que x, y chat "" est la même que Y, etc.

permet de parler de sous-chaînes. Si j'ai la chaîne "ABC", alors xxx

Un autre cas intéressant: xxx

Beaucoup de langages de programmation Obtenez ce dernier cas incorrecte, car un outil de mise en œuvre n'a pas 't pense que la chaîne vide était intéressante.


0 commentaires

0
votes

Si une chaîne vide est renvoyée à partir d'une fonction, cela signifie que la fonction effectuée est effectuée son but et le résultat était une chaîne vide. Si la fonction n'a pas réussi à construire une chaîne, elle pourrait renvoyer une null (selon le contrat de la fonction - elle peut lancer une exception). Dans ce cas, la chaîne NULL et la chaîne vide ont des significations différentes.

Le Flipside est des paramètres de fonction - Si une chaîne paramètre est facultative, vous devez faire la vérification NULL (c'est là qu'il est généralement emballé avec le chèque de vide ()).


2 commentaires

C'est pourquoi vous avez des exceptions ... pour des situations exceptionnelles ... Si la fonction renvoie NULL, c'est parce que le contrat stipule que certaines situations normalement, il devrait renvoyer null. Si quelque chose de mal est arrivé, il devrait lancer une exception. En d'autres termes ... si la fonction renvoie (quelle que soit la valeur), la fonction a fait ce qu'elle était censée faire, sinon elle jette une exception.


J'essaie de clarifier des cas où une chaîne nulle et une chaîne vide représente des choses différentes. Le reste dépend du contrat de la fonction et de la manière dont vous utilisez un comportement exceptionnel dans la langue et / ou l'API que vous utilisez.



1
votes

Pourquoi avons-nous besoin de xero? ou un tableau vide, un ensemble vide (également appelé ensemble null). Pourquoi nous soucions-nous du tout de choses quand ils ne sont pas là?

Peut-être encore plus d'intersessesse lorsqu'ils ne sont pas présents P>

Peut ne pas être exprimés si nous ne pouvons pas exprimer la valeur de rien (ce qui est très différent de la "valeur inconnue" de null p>

par exemple p> xxx pré>

Si vous dites UNKY plus (CHAR) I Le résultat serait toujours inconnu "" + 'A' est "A". Quelle est la taille de 1 + inconnue? Quand une addition peut envelopper, vous ne pouvez même pas indiquer que 1 + A est plus grand que A (si un inconnu) p>

les opérations seraient très étranges si nous n'avions pas "" Que diriez-vous de P>

string letters = allUpperCaseLetters;
for(;i>0;)
{
  int i = letters.Length
  Console.WriteLine(letters[0]);
  letters = letters.Substring(1);
}


0 commentaires

0
votes

Je n'ai pas entendu me plaindre de celui-ci avant. Tandis que null est une valeur spéciale qui peut être une valeur de n'importe quel objet tandis que la chaîne vide est une chaîne . Une analogie similaire peut également être dessinée entre null et vide ou tableau.


0 commentaires