Фактически такой вид цикла называется «цикл с предусловием», который может быть представлен в такой нотации:
i = 0;
while (++i < 10) {
//...
}
Это конечно больше философское суждение, но косвенно, инициализация условный переход и изменение состояния могут рассматриваться как часть одного выражения.
Мне просто не понятно почему во всех языках с которыми я работал для всех управляющих инструкция принята единая форма записи, в отличии от Go.
При этом я не пытаюсь осудить разработчиков языка, для меня сейчас важно понять его философию.
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
}
Потому что в этом случае используется списочное выражение, и вся логика находится в левой части. Поэтому нужен явный перевод строки. В статье есть пример:
К сожалению с обратной совместимость не все так гладко, особенно когда речь идет о классическом способе создания объектов.
На эту тему в ближайшее время постараюсь написать отдельную статью.
Этот случай относиться к так называемой «перестраховке» и генерации более безопасного выражения. Для того чтобы код получился более компактным нужно явно задать значение (без использование переменной).
Это конечно больше философское суждение, но косвенно, инициализация условный переход и изменение состояния могут рассматриваться как часть одного выражения.
Мне просто не понятно почему во всех языках с которыми я работал для всех управляющих инструкция принята единая форма записи, в отличии от Go.
При этом я не пытаюсь осудить разработчиков языка, для меня сейчас важно понять его философию.
Нигде в документации не сказано, что это относится только к логическим выражениям.
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.
Ели вас не затруднит, поясните.
На эту тему в ближайшее время постараюсь написать отдельную статью.
На выходе: