В чем разница между точками с запятой в JavaScript и в Python? - PullRequest
57 голосов
/ 28 августа 2011

Python и JavaScript позволяют разработчикам использовать или не использовать точки с запятой.Однако я часто замечал, что в книгах и блогах предлагалось не использовать точки с запятой в Python, в то время как я всегда должен использовать их в JavaScript.

Есть ли техническая разница между тем, как языки используют точки с запятойили это просто культурная разница?

Ответы [ 6 ]

68 голосов
/ 28 августа 2011

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

Теперь в Javascript, если вы не пишете точку с запятой, она автоматически вставляется 1 в концелинии.И это может вызвать проблемы.Подумайте:

function add(a, b) {
  return
    a + b
}

Вы могли бы подумать, что это возвращает a + b, но Javascript просто перехитрил вас и видит это как:

function add() {
  return;
    a + b;
}

Вместо undefined.

1 См. Стр. 27, пункт 7.9 - Автоматическая вставка точки с запятой в Спецификация языка ECMAScript для получения дополнительной информации и предупреждений.

63 голосов
/ 28 августа 2011

Это меня смущало дольше всего.Я думал, что это просто культурная разница, и что все, кто жаловался на то, что вставка точки с запятой является худшей чертой языка, был идиот .Часто повторяемый пример из ответа NullUserException не поколебал меня, потому что, не обращая внимания на отступ, Python в этом случае ведет себя так же, как JavaScript.

Затем однажды я написал что-то расплывчато похожее на это:

alert(2)
(x = $("#foo")).detach()

Я ожидал, что это будет интерпретировано так:

alert(2);
(x = $("#foo")).detach();

На самом деле это интерпретировалось так:

alert(2)(x = $("#foo")).detach();

Теперь я использую точки с запятой.

JavaScript будет только 1 трактовать символ новой строки как точку с запятой в следующих случаях:

  • Это синтаксическая ошибка, а не
  • Новая строкамежду ключевым словом throw или return и выражением.
  • символ новой строки находится между ключевым словом continue или break и идентификатором.
  • символ новой строки находится между переменной иоператор постфикса ++ или --.

Это приводит к таким случаям, когда поведение не соответствует ожидаемому.Некоторые люди 2 приняли соглашения, которые используют точки с запятой только в случае необходимости.Я предпочитаю следовать стандартному соглашению всегда использовать их, теперь, когда я знаю, что это не бессмысленно.


1 Я пропустил несколько мелких деталей, обратитесь к ECMA-262 5e Раздел 7.9 для точного описания.
2 Twitter Bootstrap является одним громким примером.

6 голосов
/ 28 августа 2011

JavaScript разработан так, чтобы «выглядеть как C», поэтому точки с запятой являются частью культуры.Синтаксис Python достаточно разный, чтобы программисты не чувствовали себя неловко, если точки с запятой «отсутствуют».

6 голосов
/ 28 августа 2011

Помимо синтаксических вопросов, это отчасти культурно. В культуре Python любые посторонние символы являются анафемой, а те, которые не являются пробелами или буквенно-цифровыми, вдвойне.

Так что такие вещи, как начальные знаки $, точки с запятой и фигурные скобки, не нравятся. Хотя то, что вы делаете в своем коде, зависит от вас, но чтобы по-настоящему понять язык, недостаточно просто изучить синтаксис.

4 голосов
/ 28 августа 2011

Ответ, почему вы не видите их в коде Python: они никому не нужны, и без них код выглядит чище.

Вообще говоря, точки с запятой - это просто традиция. Многие новые языки просто отбросили их навсегда (например, Python, Ruby, Scala, Go, Groovy, Io). Программисты не нуждаются в них, как и компиляторы. Если язык не позволяет вам вводить лишние символы, которые вам никогда не нужны, вы захотите этим воспользоваться, не так ли?

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

3 голосов
/ 28 августа 2011

Это в основном то, что python не похож на java, а javascript - так, что заставляет людей относиться к этому так.Очень просто не попасть в проблему, используя точки с запятой с javascript (http://mislav.uniqpath.com/2010/05/semicolons/),, все остальное - FUD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...