Coma como separador versus coma como delimitador

13

En este video , el orador dice:

"Algunas personas se confunden sobre cómo funcionan las comas. Piensan que deberían ser delimitadores en lugar de separadores. Ahora puede pensar en ellos de cualquier manera".

No entiendo la diferencia entre un delimitador y un separador (si hay uno). La implicación en el video es que ahora (que las comas finales son válidas), uno puede pensar en ellas como delimitadores, en lugar de separadores ...

Por cierto, el idioma en cuestión es JavaScript. Según tengo entendido, el token de coma tiene dos significados:

  • como operador (raramente usado)
  • como separador (en listas de argumentos y parámetros, literales de matrices y objetos, etc.)

No estoy seguro de cómo encaja un delimitador de coma en esto ...

Šime Vidas
fuente
2
¿Por qué importa esto?
jfriend00
77
@ jfriend00 Si hay una diferencia entre los términos delimitador y separador, quiero saberlo ... Me gusta saber cosas:)
Šime Vidas
3
@ jfriend00 Mira el video. Si la gente de IE no estuviera pensando tan estrechamente como usted, tal vez no tendríamos otro problema de portabilidad de JavaScript ...
yannis
3
@ ŠimeVidas Buena pregunta. Por cierto, el orador es Douglas Crockford, arquitecto senior de JavaScript en Yahoo, conocido por popularizar JSON y autor de JavaScript: The Good Parts . Es bueno que prestes atención a los detalles, especialmente cuando miras un video de Crockford, ya que rara vez desperdicia el aliento por cosas que no importan.
yannis
1
@ YannisRizos Sí, conozco a Crockford. Es un gran educador. :)
Šime Vidas

Respuestas:

15

Si considera la coma como un separador, usa una coma entre dos elementos de una secuencia para separarlos, si lo considera como un delimitador, lo coloca después de cada elemento para indicar dónde termina un elemento. Vea los ejemplos a continuación:

Coma como separador

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

Coma como delimitador

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

Creo que el video dice que puedes pensar en las comas como separadores y delimitadores porque ambos ejemplos de matriz anteriores son válidos. Por otro lado, en Javascript solo puede usar la coma como separador en la lista de parámetros de una función, p. Ej.

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

es válido mientras

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

no es válido.

EDITAR

Según tengo entendido, según la página de Wikipedia, un separador es un caso especial de un delimitador , es decir, uno que se coloca entre las diferentes regiones de texto cuyos límites deben marcarse. De hecho, la página de wikipedia nombra valores separados por comas como ejemplo de uso de delimitadores. Por lo tanto, en general, puede usar delimitadores de diferentes maneras: antes, después, en ambos lados de la parte del texto que se va a marcar.

La razón por la que interpreté el delimitador como "marcador que se coloca después de un elemento" en el contexto de Javascript fue motivado por el ejemplo literal de matriz, que también es válido para C, C ++ y Java (creo que he visto al menos una pregunta sobre desbordamiento de pila con respecto a este tema).

Otro ejemplo de uso similar pero diferente de un carácter es el del punto y coma como delimitador de sentencias (C, C ++, Java, Ada, ...) y como separador de sentencias (Pascal). Por lo tanto

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

es el código C correcto mientras que

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

no es un código Pascal correcto.

¿Quizás terminador sería un término mejor / menos ambiguo que delimitador ? Por ejemplo, se podría formular la cita de la siguiente manera: "Algunas personas se confunden sobre cómo funcionan las comas. Piensan que deberían ser terminadores de elementos en lugar de separadores de elementos . Ahora (en muchos casos) puede pensar en ellos de cualquier manera".

Giorgio
fuente
Sí, en las listas de parámetros, la coma debe usarse como un separador, mientras que en los literales de matriz, la coma puede usarse como un separador o un delimitador. O en términos simples: puede poner una coma después del último elemento de la matriz, pero no es necesario.
Šime Vidas
Si bien su respuesta explica bastante bien la cita de mi pregunta, la página de Wikipedia para "Delimitador" proporciona diferentes definiciones. Según ese artículo, un delimitador especifica el límite entre regiones. Entonces, el ejemplo de "coma como separador" de su pregunta anterior se llamaría delimitador de campo de coma, mientras que el ejemplo de "coma como delimitador" no está representado en ninguna parte de esa página Wiki.
Šime Vidas
@ Šime Vidas - Wikipedia es solo una referencia como cualquier otra referencia, no es la única referencia.
Michael Riley - AKA Gunny
@CapeCodGunny Sí, solo estoy señalando que hay definiciones enfrentadas. También me gustaría ver definiciones de otras referencias.
Šime Vidas
7

Se colocaría un separador entre dos valores, separándolos.

one,two,three

Un delimitador delimitaría un campo, estaría en ambos lados.

,one,two,three,

Cuando se toma de esta manera, hace poca diferencia, siempre y cuando uno pueda extraer los campos separados.

Este es un problema completamente diferente al uso de una coma en un lenguaje de programación como javascript. Se trata de delimitar / separar valores dentro de una cadena.

Oded
fuente
1
Ah sí, esto tiene sentido.
Šime Vidas
No estoy de acuerdo con tu explicación del delimitador. Según su explicación, sería, uno, dos, tres, ahora el delimitador está en ambos lados.
Michael Riley - AKA Gunny
1
@CapeCodGunny: estás malinterpretando. El ejemplo que di tiene una coma antes y después de cada valor. Las comas que no están al principio y al final de la cadena sirven como delimitador final y delimitador inicial.
Finalizado el
@Oded Este artículo de Wikipedia proporciona diferentes definiciones. Según él, su primer ejemplo sería un delimitador de campo, mientras que su segundo ejemplo no está representado en ese artículo en absoluto.
Šime Vidas
1
¡Palabra de precaución! var myNumbers = ['one','two','three', ];(coma al final) daría una longitud de matriz como 3 pero debido a una coma en el frente var myNumbers = [,'one','two','three'];da una longitud de 4.
RBT