Подтвердить что ты не робот

В чем разница между точками с запятой в JavaScript и Python?

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Вместо этого возвращаем undefined.

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

Ответ 2

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

Тогда однажды я написал что-то неопределенно:

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

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

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

На самом деле это было интерпретировано следующим образом:

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

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

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

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

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


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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

a = 2
b = 3
return a + b

// minified
a=2b=3return a+b