Почему большинство языков программирования используют запятую перед новой строкой, а не после новой? - PullRequest
0 голосов
/ 11 ноября 2018

Чтобы объяснить, почему я поставил этот вопрос, я объясню общеупотребительные многострочные нотации списка / словаря python3 и как выглядит фактическое определение синтаксиса.

Это наиболее часто используемая нотация многострочного списка в python3:

list_variable = [
    'value1',
    'value2',
    # The last comma after 'value2' is sometimes omitted.
]

И, чтобы понять, как эта нотация распознается синтаксическим анализатором, нам нужно взглянуть на определение грамматики ( ссылка ).

В определении python определения, подобные спискам, определяются следующим образом:

list_like: '[' [element (',' element)* [','] ] ']'

Позвольте мне объяснить это немного подробнее, на тот случай, если вы не знакомы с определением синтаксиса или я плохой обобщитель:

  1. '' означает, что на самом деле это персонаж. Например, '[' и ']' - это окончание или начало списка в чистых символах, которое будет [ 'value1', 'value2', ] в реальном коде.

  2. element - ожидаемые элементы их типа. например, если это список, это будет одна переменная. Если это словарь, это будет key ':' value.

  3. [] означает все вещи внутри, которые являются необязательными.

  4. () означает все вещи внутри, которые находятся в одном наборе. то есть все это объединяется.

  5. * означает предшествующий синтаксис, который может встречаться 0 или более раз. В этом примере (',' element) может быть опущено, но также может происходить 3 раза.

  6. Я почти забыл упомянуть, что эти правила применяются после того, как управление пробелами выполнено.


Хорошо, давайте посмотрим на пример разбора списка:

  1. [1]

    будет проанализирован в '[' element ']'

  2. [1, ]

    будет '[' element ',' ']'

  3. [1, 2]

    будет '[' element (',' element) ']'

  4. [1, 2, ]

    будет '[' element (',' element) ',' ']'

Итак, как вы видите, в примере 3 запятая связана с 2, а не 1. Кроме того, в этом примере последняя запятая не связана с 2 - на самом деле она не связана ни с чем с точки зрения определения синтаксиса.


Теперь актуальный вопрос: Есть ли еще причины использовать запятую перед символом новой строки, кроме того факта, что большинство языков использовали это обычно? Я думаю, что целесообразно использовать запятую после новой строки по следующим причинам:

  1. Это больше похоже на фактическое определение синтаксиса.

  2. Это гарантирует, что всегда будет точное количество запятых (количество элементов - 1), и это помогает, когда вы имеете дело с языками, которые ненавидят дополнительные начальные запятые, например, SQL.

  3. Он также удобен для git, как запись до запятой: если вы добавите новый элемент в список, git diff покажет только + , new_element.

    Фактически, в нотации запятая до новой строки, если кто-то забыл добавить запятую после old_element (или потому что язык не допускает дополнительную запятую), кто-то, кто добавляет элемент после этого, увидит журнал git наподобие это:

- old_element
+ old_element,
+ new_element,

1 Ответ

0 голосов
/ 03 января 2019

(1) «Большинство» языков программирования не имеют никаких предпочтений. Это программист, который решает, где поставить запятые. Для приведенного вами случая, когда язык или некоторая библиотека времени выполнения сериализует некоторую структуру в текстовую строку, это вопрос предпочтения, то есть мнения. Смотри (2).

(2) Мне, как и некоторым другим, мои языки программирования выглядят как знакомая нотация. В английской прозе я пишу «fee, foe, fie, fum», а не «fee, foe, fie, fum» - запятая прикрепляется к первому из двух разделяемых элементов, а не ко второму. Аналогично в математике.

...