Vírgula como separador vs. vírgula como delimitador


13

Em este vídeo , o orador diz:

"Algumas pessoas ficam confusas sobre como as vírgulas funcionam. Elas pensam que deveriam ser delimitadoras, e não separadoras. Agora você pode pensar nelas de qualquer maneira".

Não entendo a diferença entre um delimitador e um separador (se houver um). A implicação no vídeo é que agora (que as vírgulas finais são válidas), pode-se pensar nelas como delimitadores, em vez de separadores ...

Entre o idioma em questão é JavaScript. Pelo meu entendimento, o token de vírgula tem dois significados:

  • como operador (raramente usado)
  • como um separador (nas listas de argumentos e parâmetros, literais de matriz e objeto, etc.)

Não sei como um delimitador de vírgula se encaixa nisso ...


2
Por que isso importa?
jfriend00

7
@ jfriend00 Se houver uma diferença entre os termos delimitadores e separador, eu quero saber ... Eu gostaria de saber coisas:)
Šime Vidas

3
@ jfriend00 Assista ao vídeo. Se o pessoal do IE não estivesse pensando tão estreitamente quanto você, talvez não tivéssemos mais uma portabilidade javascript snafu ...
yannis

3
@ ŠimeVidas Boa pergunta. BTW, o orador é Douglas Crockford, arquiteto sênior de JavaScript do Yahoo, conhecido por popularizar JSON e autor de JavaScript: The Good Parts . É bom pensar que você presta atenção aos detalhes, especialmente quando assiste a um vídeo de Crockford, pois ele raramente gasta fôlego por coisas que não importam.
yannis

1
@YannisRizos Sim, eu conheço Crockford. Ele é um ótimo educador. :)
Šime Vidas

Respostas:


15

Se você considerar a vírgula como um separador, use uma vírgula entre dois itens de uma sequência para separá-los; se a considerar como delimitadora, coloque-a após cada item para indicar onde um item termina. Veja os exemplos abaixo:

Vírgula como separador

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

Vírgula como delimitador

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

Acho que o vídeo diz que você pode pensar em vírgulas como separadores e delimitadores, porque os dois exemplos de matriz acima são válidos. Por outro lado, em Javascript, você só pode usar a vírgula como separador na lista de parâmetros de uma função, por exemplo

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

é válido enquanto

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

não é válido.

EDITAR

Tanto quanto eu entendo, de acordo com a página da wikipedia, um separador é um caso especial de um delimitador , a saber, um que é colocado entre as diferentes regiões do texto cujos limites precisam ser marcados. De fato, a página da Wikipedia nomeia valores separados por vírgula como um exemplo de uso de delimitadores. Portanto, em geral você pode usar delimitadores de diferentes maneiras: antes, depois, nos dois lados da parte do texto a ser marcada.

A razão pela qual interpretei o delimitador como "marcador colocado após um item" no contexto Javascript foi motivada pelo exemplo literal da matriz, que também é válido para C, C ++ e Java (acho que vi pelo menos uma pergunta em estouro de pilha em relação a este tópico).

Outro exemplo de uso semelhante, mas diferente, de um caractere é o ponto-e-vírgula como delimitador de instrução (C, C ++, Java, Ada, ...) e como separador de instrução (Pascal). Portanto

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

é o código C correto, enquanto

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

não há código Pascal correto.

Talvez terminator seja um termo melhor / menos ambíguo que delimitador ? Por exemplo, pode-se formular a citação da seguinte maneira: "Algumas pessoas ficam confusas sobre como as vírgulas funcionam. Elas acham que devem ser terminadores de itens em vez de separadores de itens . Agora (em muitos casos), você pode pensar nelas de qualquer maneira".


Sim, nas listas de parâmetros, a vírgula deve ser usada como separador, enquanto que nos literais da matriz, a vírgula pode ser usada como separador ou delimitador. Ou, em termos de leigo: você pode colocar uma vírgula após o último elemento da matriz, mas não precisa.
Šime Vidas

Embora sua resposta explique muito bem a citação da minha pergunta, a página da Wikipedia para "Delimitador" fornece definições diferentes. Segundo esse artigo, um delimitador especifica o limite entre as regiões. Portanto, o exemplo "vírgula como separador" da sua pergunta acima seria chamado de delimitador de campo de vírgula, enquanto o exemplo "vírgula como delimitador" não é representado em nenhum lugar da página da Wiki.
Šime Vidas

@ Šime Vidas - Wikipedia é apenas uma referência como qualquer outra referência, não é a única referência.
Michael Riley - AKA Gunny

@CapeCodGunny Sim, estou apenas apontando que existem definições conflitantes. Também gostaria de ver definições de outras referências.
Šime Vidas

7

Um separador seria colocado entre dois valores, separando-os.

one,two,three

Um delimitador delimitaria um campo - seria nos dois lados.

,one,two,three,

Quando tomado dessa maneira, faz pouca diferença, desde que se possa extrair os campos separados.

Esse é um problema completamente diferente do uso de vírgula em uma linguagem de programação como o javascript. Trata-se de delimitar / separar valores dentro de uma string.


1
Ah sim, isso faz sentido.
Šime Vidas

Discordo da sua explicação sobre o delimitador. Com base na sua explicação, seria um, dois, três, agora o delimitador está nos dois lados.
Michael Riley - AKA Gunny

1
@CapeCodGunny - Você está interpretando mal. O exemplo que eu dei tem uma vírgula antes e depois de cada valor. As vírgulas que não estão no início e no final da sequência servem como delimitador final e delimitador inicial.
Oded

@Oded Este artigo da Wikipedia fornece definições diferentes. De acordo com ele, seu primeiro exemplo seria um delimitador de campo, enquanto seu segundo exemplo não está representado nesse artigo.
Šime Vidas

1
Palavra de cautela! var myNumbers = ['one','two','three', ];(vírgula no final) daria comprimento matriz como 3, mas por causa de uma vírgula na frente var myNumbers = [,'one','two','three'];dá comprimento como 4.
RBT
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.