Virgule comme séparateur vs virgule comme délimiteur

13

Dans cette vidéo , le conférencier dit:

"Certaines personnes ne savent pas comment fonctionnent les virgules. Elles pensent qu'elles devraient être des délimiteurs plutôt que des séparateurs. Maintenant, vous pouvez penser à elles de toute façon."

Je ne comprends pas la différence entre un délimiteur et un séparateur (s'il y en a un). L'implication dans la vidéo est que maintenant (que les virgules de fin sont valides), on peut les considérer comme des délimiteurs, plutôt que des séparateurs ...

Btw la langue en question est JavaScript. D'après ma compréhension, le jeton virgule a deux significations:

  • en tant qu'opérateur (rarement utilisé)
  • comme séparateur (dans les listes d'arguments et de paramètres, les littéraux de tableaux et d'objets, etc.)

Je ne sais pas comment un délimiteur de virgule s'inscrit dans ce ...

Šime Vidas
la source
2
Pourquoi est-ce important?
jfriend00
7
@ jfriend00 S'il y a une différence entre les termes délimiteur et séparateur, je veux le savoir ... j'aime savoir des choses:)
Šime Vidas
3
@ jfriend00 Regardez la vidéo. Si les gens d'IE ne pensaient pas aussi étroitement que vous, peut-être que nous n'aurions pas encore un autre snafu de portabilité javascript ...
yannis
3
@ ŠimeVidas Bonne question. BTW l'orateur est Douglas Crockford, architecte JavaScript senior chez Yahoo, connu pour populariser JSON et auteur de JavaScript: The Good Parts . C'est une bonne chose que vous fassiez attention aux détails, en particulier lorsque vous regardez une vidéo de Crockford, car il perd rarement son souffle pour des choses qui n'ont pas d'importance.
yannis
1
@YannisRizos Oui, je connais Crockford. C'est un grand éducateur. :)
Šime Vidas

Réponses:

15

Si vous considérez la virgule comme un séparateur, vous utilisez une virgule entre deux éléments d'une séquence pour les séparer, si vous la considérez comme un délimiteur, vous la placez après chaque élément pour indiquer où se termine un élément. Voir les exemples ci-dessous:

Virgule comme séparateur

var myCars = ["Saab", "Volvo", "BMW" ];

La virgule comme délimiteur

var myCars = ["Saab", "Volvo", "BMW", ];

Je pense que la vidéo dit que vous pouvez considérer les virgules à la fois comme séparateurs et délimiteurs car les deux exemples de tableaux ci-dessus sont valides. En revanche, en Javascript, vous ne pouvez utiliser la virgule comme séparateur que dans la liste des paramètres d'une fonction, par exemple

foo(a, b, c) // separator, OK

est valide alors que

foo(a, b, c,) // delimiter, NOT OK!

n'est pas valide.

ÉDITER

D'après ce que je comprends, selon la page wikipedia, un séparateur est un cas particulier de délimiteur , à savoir celui qui est placé entre les différentes régions de texte dont les limites doivent être marquées. En fait, la page wikipedia nomme les valeurs séparées par des virgules comme exemple d'utilisation de délimiteurs. Ainsi, en général, vous pouvez utiliser des délimiteurs de différentes manières: avant, après, des deux côtés de la partie du texte à marquer.

La raison pour laquelle j'ai interprété le délimiteur comme "marqueur placé après un élément" dans le contexte Javascript était motivée par l'exemple littéral du tableau, qui est également valable pour C, C ++ et Java (je pense avoir vu au moins une question sur débordement de pile concernant ce sujet).

Un autre exemple d'utilisation similaire mais différente d'un caractère est celui du point-virgule comme délimiteur d'instructions (C, C ++, Java, Ada, ...) et comme séparateur d'instructions (Pascal). Donc

if (a > 0)
    printf("Positive\n");
else
    printf("Non positive\n");

est le bon code C alors que

IF a > 0 THEN
    WriteLn('Positive'); (* Syntax error here! *)
ELSE
    WriteLn('Non positive');

n'est pas un code Pascal correct.

Peut-être que terminateur serait un terme meilleur / moins ambigu que délimiteur ? Par exemple, on pourrait formuler la citation comme suit: "Certaines personnes se trompent sur le fonctionnement des virgules. Ils pensent qu'ils devraient être des terminateurs d'élément plutôt que des séparateurs d'élément . Maintenant (dans de nombreux cas), vous pouvez penser à eux de toute façon."

Giorgio
la source
Oui, dans les listes de paramètres, la virgule doit être utilisée comme séparateur, tandis que dans les littéraux de tableau, la virgule peut être utilisée comme séparateur ou délimiteur. Ou en termes simples: vous pouvez mettre une virgule après le dernier élément du tableau, mais ce n'est pas obligatoire.
Šime Vidas
Bien que votre réponse explique assez bien la citation de ma question, la page Wikipédia de "Délimiteur" fournit différentes définitions. Selon cet article, un délimiteur spécifie la frontière entre les régions. Ainsi, l'exemple "virgule comme séparateur" de votre question ci-dessus serait appelé le délimiteur de champ de virgule, tandis que l'exemple "virgule comme délimiteur" n'est représenté nulle part sur cette page Wiki.
Šime Vidas
@ Šime Vidas - Wikipedia n'est qu'une référence comme toute autre référence, ce n'est pas la seule référence.
Michael Riley - AKA Gunny
@CapeCodGunny Oui, je fais juste remarquer qu'il existe des définitions opposées. J'aimerais également voir les définitions d'autres références.
Šime Vidas
7

Un séparateur serait placé entre deux valeurs, les séparant.

one,two,three

Un délimiteur délimiterait un champ - ce serait des deux côtés.

,one,two,three,

Pris de cette façon, cela fait peu de différence, tant que l'on peut extraire les champs séparés.

Il s'agit d'un problème complètement différent de celui de l'utilisation d'une virgule dans un langage de programmation tel que javascript. Il s'agit de délimiter / séparer des valeurs dans une chaîne.

Oded
la source
1
Ah oui, cela a du sens.
Šime Vidas
Je ne suis pas d'accord avec votre explication de délimiteur. D'après votre explication, ce serait un, deux, trois, maintenant le délimiteur est des deux côtés.
Michael Riley - AKA Gunny
1
@CapeCodGunny - Vous vous trompez. L'exemple que j'ai donné a une virgule avant et après chaque valeur. Les virgules qui ne se trouvent pas au tout début et à la fin de la chaîne servent de délimiteur de fin et de délimiteur de début.
Oded
@Oded Cet article Wikipédia fournit différentes définitions. Selon lui, votre premier exemple serait un délimiteur de champ, tandis que votre deuxième exemple n'est pas du tout représenté dans cet article.
Šime Vidas
1
Attention! var myNumbers = ['one','two','three', ];(virgule à la fin) donnerait une longueur de tableau de 3 mais à cause d'une virgule à l'avant var myNumbers = [,'one','two','three'];donne une longueur de 4.
RBT