Virgola come separatore vs. virgola come delimitatore


13

In questo video , l'oratore dice:

"Alcune persone si confondono su come funzionano le virgole. Pensano che dovrebbero essere delimitatori piuttosto che separatori. Ora puoi pensarci in entrambi i modi."

Non capisco la differenza tra un delimitatore e un separatore (se ce n'è uno). L'implicazione nel video è che ora (che le virgole finali sono valide), si possono pensare a loro come delimitatori, piuttosto che separatori ...

A proposito, la lingua in questione è JavaScript. Da quanto ho capito, il token virgola ha due significati:

  • come operatore (usato raramente)
  • come separatore (in elenchi di argomenti e parametri, valori letterali di array e oggetti, ecc.)

Non sono sicuro di come un delimitatore virgola si adatti a questo ...


2
Perché è importante?
jfriend00,

7
@ jfriend00 Se c'è una differenza tra i termini delimitatore e separatore, voglio saperlo ... Mi piace conoscere le cose:)
Šime Vidas,

3
@ jfriend00 Guarda il video. Se la gente di IE non stesse pensando in modo ristretto come te, forse non avremmo ancora un altro snafu di portabilità javascript ...
yannis,

3
@ ŠimeVidas Buona domanda. A proposito, l'oratore è Douglas Crockford, architetto JavaScript senior di Yahoo, noto per aver reso popolare JSON e autore di JavaScript: The Good Parts . È una buona idea che presti attenzione ai dettagli, specialmente quando guardi un video di Crockford, poiché raramente spreca fiato per cose che non contano.
yannis,

1
@YannisRizos Sì, conosco Crockford. È un grande educatore. :)
Šime Vidas,

Risposte:


15

Se consideri la virgola come un separatore, usi una virgola tra due elementi di una sequenza per separarli, se la consideri come delimitatore, la metti dopo ogni elemento per indicare dove termina un elemento. Vedi gli esempi seguenti:

Virgola come separatore

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

Virgola come delimitatore

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

Penso che il video affermi che puoi pensare alle virgole sia come separatori che come delimitatori perché entrambi gli esempi di array sopra riportati sono validi. D'altra parte in Javascript è possibile utilizzare la virgola solo come separatore nell'elenco dei parametri di una funzione, ad es

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

è valido considerando che

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

non è valido.

MODIFICARE

Per quanto ho capito, secondo la pagina di Wikipedia un separatore è un caso speciale di un delimitatore , vale a dire uno che viene messo tra le diverse regioni di testo i cui confini devono essere segnati. In effetti, la pagina di Wikipedia nomina i valori separati da virgola come esempio di utilizzo dei delimitatori. Quindi, in generale, puoi usare i delimitatori in diversi modi: prima, dopo, su entrambi i lati della porzione di testo da contrassegnare.

Il motivo per cui ho interpretato il delimitatore come "marker che viene inserito dopo un elemento" nel contesto Javascript è stato motivato dall'esempio letterale di array, che è valido anche per C, C ++ e Java (penso di aver visto almeno una domanda su stack overflow su questo argomento).

Un altro esempio di utilizzo simile ma diverso di un carattere è quello del punto e virgola come delimitatore di istruzioni (C, C ++, Java, Ada, ...) e come separatore di istruzioni (Pascal). Perciò

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

è il codice C corretto mentre

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

non è un codice Pascal corretto.

Forse terminator sarebbe un termine migliore / meno ambiguo del delimitatore ? Ad esempio si potrebbe formulare la citazione come segue: "Alcune persone si confondono su come funzionano le virgole. Pensano che dovrebbero essere terminatori di articoli piuttosto che separatori di oggetti . Ora (in molti casi) puoi pensarci in entrambi i modi".


Sì, negli elenchi di parametri la virgola deve essere utilizzata come separatore, mentre nelle letterali di array la virgola può essere utilizzata sia come separatore che come delimitatore. O in parole povere: è possibile inserire una virgola dopo l'ultimo elemento dell'array, ma non è necessario.
Šime Vidas,

Mentre la tua risposta spiega abbastanza bene la citazione dalla mia domanda, la pagina di Wikipedia per "Delimitatore" fornisce definizioni diverse. Secondo tale articolo, un delimitatore specifica il confine tra le regioni. Pertanto, l'esempio "virgola come separatore" della domanda precedente verrà chiamato delimitatore del campo virgola, mentre l'esempio "virgola come delimitatore" non è rappresentato da nessuna parte nella pagina Wiki.
Šime Vidas,

@ Šime Vidas - Wikipedia è solo un riferimento come qualsiasi altro riferimento, non è l'unico riferimento.
Michael Riley - AKA Gunny il

@CapeCodGunny Sì, sto solo sottolineando che ci sono definizioni contrastanti. Vorrei vedere definizioni anche da altri riferimenti.
Šime Vidas,

7

Un separatore verrebbe inserito tra due valori, separandoli.

one,two,three

Un delimitatore avrebbe delimitato un campo: sarebbe su entrambi i lati.

,one,two,three,

Se preso in questo modo, fa poca differenza, purché si possano estrarre i campi separati.

Questo è un problema completamente diverso da quello dell'uso di una virgola in un linguaggio di programmazione come javascript. Si tratta di delimitare / separare i valori all'interno di una stringa.


1
Ah sì, questo ha senso.
Šime Vidas,

Non sono d'accordo con la tua spiegazione del delimitatore. Sulla base della tua spiegazione sarebbe, uno, due, tre, ora il delimitatore è su entrambi i lati.
Michael Riley - AKA Gunny il

1
@CapeCodGunny - Stai interpretando male. L'esempio che ho dato ha una virgola prima e dopo ogni valore. Le virgole non all'inizio e alla fine della stringa fungono da delimitatore di fine e delimitatore di inizio.
Oded,

@Oded This articolo di Wikipedia fornisce diverse definizioni. Secondo esso, il tuo primo esempio sarebbe un delimitatore di campo, mentre il tuo secondo esempio non è affatto rappresentato in quell'articolo.
Šime Vidas,

1
Avvertenza! var myNumbers = ['one','two','three', ];(virgola alla fine) darebbe la lunghezza dell'array come 3 ma a causa di una virgola nella parte anteriorevar myNumbers = [,'one','two','three']; lunghezza 4.
RBT
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.