Запятая как разделитель и запятая как разделитель


13

В этом видео спикер говорит:

«Некоторые люди не понимают, как работают запятые. Они думают, что они должны быть разделителями, а не разделителями. Теперь вы можете думать о них так или иначе».

Я не понимаю разницу между разделителем и разделителем (если он есть). Смысл в видео заключается в том, что теперь (когда завершающие запятые действительны), их можно рассматривать как разделители, а не разделители ...

Кстати, речь идет о JavaScript. Насколько я понимаю, запятая имеет два значения:

  • в качестве оператора (редко используется)
  • в качестве разделителя (в списках аргументов и параметров, литералах массивов и объектов и т. д.)

Я не уверен, как разделитель запятой вписывается в это ...


2
Почему это важно?
jfriend00

7
@ jfriend00 Если есть различие между терминами-разделителями и разделителем, я хочу это знать ... Мне нравится знать вещи:)
Шиме Видас

3
@ jfriend00 Посмотрите видео. Если бы люди из IE не думали так же узко, как вы, возможно, у нас не было бы еще одной javascript-переносимости snafu ...
yannis

3
@ ŠimeVidas Хороший вопрос. Кстати, спикер - Дуглас Крокфорд, старший JavaScript-архитектор в Yahoo, известный популяризацией JSON и автором JavaScript: The Good Parts . Хорошо, что вы обращаете внимание на детали, особенно при просмотре видео Крокфорда, поскольку он редко тратит дух на вещи, которые не имеют значения.
Яннис

1
@YannisRizos Да, я знаю Крокфорда. Он отличный педагог. :)
Шиме Видас

Ответы:


15

Если вы рассматриваете запятую как разделитель, вы используете запятую между двумя элементами последовательности, чтобы разделить их, если вы рассматриваете ее как разделитель, вы ставите ее после каждого элемента, чтобы указать, где заканчивается элемент. Смотрите примеры ниже:

Запятая как разделитель

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

Запятая как разделитель

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

Я думаю, что видео говорит о том, что вы можете рассматривать запятые как разделители и разделители, потому что оба приведенных выше примера массива действительны. С другой стороны, в Javascript вы можете использовать запятую только в качестве разделителя в списке параметров функции, например

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

действует тогда как

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

не является допустимым.

РЕДАКТИРОВАТЬ

Насколько я понимаю, согласно странице википедии разделитель является частным случаем разделителя , а именно, который помещается между различными текстовыми областями, границы которых необходимо пометить. На самом деле, страницы википедии именуют разделенные запятыми значения в качестве примера использования разделителей. Таким образом, в целом вы можете использовать разделители по-разному: до, после, по обе стороны от части текста, которая будет отмечена.

Причина, по которой я интерпретировал разделитель как «маркер, который ставится после элемента» в контексте Javascript, был мотивирован примером литерала массива, который действителен также для C, C ++ и Java (думаю, я видел по крайней мере один вопрос о переполнение стека относительно этой темы).

Другим примером аналогичного, но различного использования символа является точка с запятой в качестве разделителя операторов (C, C ++, Java, Ada, ...) и в качестве разделителя операторов (Pascal). Следовательно

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

правильный код C, тогда как

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

неверный код Паскаля.

Может быть терминатор будет лучше / менее двусмысленным термином, чем разделитель ? Например, можно сформулировать цитату следующим образом: «Некоторые люди не понимают, как работают запятые. Они думают, что они должны быть разделителями элементов, а не разделителями элементов . Теперь (во многих случаях) вы можете думать о них так или иначе».


Да, в списках параметров запятая должна использоваться в качестве разделителя, тогда как в литералах массива запятая может использоваться как разделитель или разделитель. Или с точки зрения непрофессионала: вы можете поставить запятую после последнего элемента массива, но это не обязательно.
Шиме Видас

Хотя ваш ответ довольно хорошо объясняет цитату из моего вопроса, на странице Википедии для «Разделителя» даются разные определения. Согласно этой статье, разделитель определяет границу между регионами. Таким образом, пример «запятая как разделитель» из приведенного выше вопроса будет называться разделителем поля запятой, а пример «запятая как разделитель» нигде на этой вики-странице не представлен.
Шиме Видас

@ Šime Vidas - Википедия - это просто ссылка, как и любая другая ссылка, это не единственная ссылка.
Майкл Райли - AKA Gunny

@CapeCodGunny Да, я просто указываю, что существуют противоречивые определения. Я также хотел бы увидеть определения из других ссылок.
Шиме Видас

7

Разделитель будет помещен между двумя значениями, разделяя их.

one,two,three

Разделитель будет разделять поле - оно будет с обеих сторон.

,one,two,three,

При таком подходе это не имеет большого значения, если можно извлечь отдельные поля.

Это совершенно другая проблема, связанная с использованием запятой в языке программирования, таком как javascript. Речь идет о разделении / разделении значений внутри строки.


1
Ах да, это имеет смысл.
Шиме Видас

Я не согласен с вашим объяснением разделителя. Исходя из вашего объяснения, будет один, два, три, теперь разделитель находится с обеих сторон.
Майкл Райли - AKA Gunny

1
@CapeCodGunny - Вы неправильно истолковали. Пример, который я привел, имеет запятую до и после каждого значения. Запятые не в самом начале и конце строки служат конечным и начальным разделителями.
Одед

@Oded Эта статья в Википедии содержит различные определения. В соответствии с этим, вашим первым примером будет разделитель полей, а ваш второй пример вообще не представлен в этой статье.
Шиме Видас

1
Слово предостережения! var myNumbers = ['one','two','three', ];(запятая в конце) даст длину массива как 3, но из-за запятой в передней части var myNumbers = [,'one','two','three'];дает длину как 4.
RBT
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.