Как стать автором
Обновить
27
0
Александр А @monolithed

Пользователь

Отправить сообщение
А перед этим он вошел в историю когда уговорил Eich'a не принимать ES4.
А как же разработчики других библиотек и плагинов (MooTools, ExtJS, Raphaël, Firebug и пр.)?
Фактически такой вид цикла называется «цикл с предусловием», который может быть представлен в такой нотации:

i = 0;

while (++i < 10) {
   //...
}


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

Мне просто не понятно почему во всех языках с которыми я работал для всех управляющих инструкция принята единая форма записи, в отличии от Go.

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

Так все что внутри скобок инструкции for тоже выражение!
Нигде в документации не сказано, что это относится только к логическим выражениям.
Я лично читал документацию.

Go does not require parentheses around the condition of an if statement, or the expressions of a for statement, or the value of a switch statement.

if (a < b) {}                      // VALID
for (i = 0; i < 10; i++) {}  // INVALID


Ели вас не затруднит, поясните.
А мне больше интересно почему?

if a < b { f() }             // Valid
if (a < b) { f() }           // Valid 
if (a < b) f()               // INVALID
for i = 0; i < 10; i++ {}    // Valid
for (i = 0; i < 10; i++) {}  // INVALID

if x {
}
else {    // INVALID
}
Добавил раздел про вложенные инструкции!
Спасибо, что заметили, alert лишний.
Потому что в этом случае используется списочное выражение. Поэтому нужно явно использовать перевод строки.
Потому что в этом случае используется списочное выражение, и вся логика находится в левой части. Поэтому нужен явный перевод строки. В статье есть пример:
извращенный*
Безусловно это извращений способ.

arr = x:1
do ([arr.x]) -> alert _arg #1

Можно сделать так:
do([arr.x]) ->

К сожалению с обратной совместимость не все так гладко, особенно когда речь идет о классическом способе создания объектов.
На эту тему в ближайшее время постараюсь написать отдельную статью.
for i in [1..5]
  alert i
  for i in [0..2]
    alert i


На выходе:
var i;

for (i = 1; i <= 5; i++) {
  alert(i);
  for (i = 0; i <= 2; i++) {
    alert(i);
  }
}


Этот случай относиться к так называемой «перестраховке» и генерации более безопасного выражения. Для того чтобы код получился более компактным нужно явно задать значение (без использование переменной).
Вероятно, вы забыли разделитель между выражением и телом цикла. Покажите как вы его написали.
Приведите пожалуйста пример того, что вас вводит в этот конфуз.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность