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.