Кома як роздільник проти кома як роздільник


14

У цьому відео спікер говорить:

"Деякі люди плутаються в тому, як працюють коми. Вони думають, що вони повинні бути роздільниками, а не роздільниками. Тепер ви можете думати про них у будь-якому випадку".

Я не розумію різниці між роздільником і роздільником (якщо такий є). Наслідком цього відео є те, що зараз (що знаки комами є дійсними), ви можете вважати їх розмежувачами, а не роздільниками ...

Btw мова, про яку йде мова, - JavaScript. Наскільки я розумію, маркер кома має два значення:

  • як оператор (рідко використовується)
  • як роздільник (у списках аргументів та параметрів, літералах масиву та об’єктів тощо)

Я не впевнений, як розмежувач з комами вписується в це ...


2
Чому це має значення?
jfriend00

7
@ jfriend00 Якщо є різниця між розділювачем термінів і роздільником, я хочу це знати ... Мені подобається знати речі:)
Šime Vidas

3
@ jfriend00 Подивіться відео. Якби люди IE не думали так вузько, як ви, можливо, у нас не було б ще одного сніфу для перенесення Javascript ...
yannis

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

1
@YannisRizos Так, я знаю Крокфорда. Він чудовий педагог. :)
Šime Vidas

Відповіді:


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!

не вірно.

EDIT

Наскільки я розумію, згідно зі сторінкою вікіпедії роздільник є особливим випадком розмежувача , а саме тим, що розміщується між різними текстовими областями, межі яких необхідно позначити. Фактично, на сторінці вікіпедії названі значення, розділені комами, як приклад використання роздільників. Отже, загалом ви можете використовувати роздільники різними способами: до, після, по обидва боки частини тексту, яку слід позначати.

Причина, по якій я інтерпретував роздільник як "маркер, який ставиться після елемента" в контексті 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

Хоча ваша відповідь досить добре пояснює цитату з мого запитання, сторінка Вікіпедії для "Delimiter" містить різні визначення. Відповідно до цієї статті розмежувач визначає межу між регіонами. Отже, приклад "кома як роздільник" з вашого запитання вище називатиметься роздільником поля кома, тоді як приклад "кома як роздільник" ніде на цій сторінці Вікі не представлений.
Šime Vidas

@ Šime Vidas - Вікіпедія - це просто посилання, як і будь-яка інша довідка, це не єдина посилання.
Майкл Райлі - AKA Gunny

@CapeCodGunny Так, я просто вказую, що існують протилежні визначення. Я хотів би бачити визначення і з інших посилань.
Šime Vidas

7

Роздільник буде розміщений між двома значеннями, розділяючи їх.

one,two,three

Розмежувач розмежував би поле - воно було б з обох боків.

,one,two,three,

Якщо взяти цей спосіб, це мало має значення, доки можна витягти окремі поля з поля.

Це зовсім інше питання, ніж використання коми через мову програмування, наприклад, JavaScript. Йдеться про розмежування / розділення значень у рядку.


1
Ага так, це має сенс.
Šime Vidas

Я не погоджуюся з вашим поясненням щодо роздільника. Виходячи з вашого пояснення, було б, один ,, два ,, три, тепер роздільник є з обох сторін.
Майкл Райлі - AKA Gunny

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

@Oded Ця стаття у Вікіпедії містить різні визначення. Згідно з нею, ваш перший приклад буде роздільником поля, тоді як ваш другий приклад взагалі не представлений у цій статті.
Šime Vidas

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.