Java

Конструкция Java: i++ и ++i в циклах for

Циклы
for (int i = 0; i < 10; ++i)
System.out.println(i);

И циклы
for (int i = 0; i < 10; i++)
System.out.println(i);

Ничем не отличаются по поведению. Почему бы в первом сначала не увеличивать i на 1 а потом продолжать или начинать цикл? Это было бы полезной языковой конструкцией.
По вашему мнению, почему во многих языках программирования не предусмотрено такое?
Антон Шулунов
Антон Шулунов
1 675
Потому, что в большинстве C-style языков (к коим относится Java) не существует полноценного цикла со счётчиком и на месте ++i может стоять абсолютно любое выражение. Фактически, for - лишь синтаксический сахар для while.

В Algol-style языках нормальный цикл со счётчиком существует и там в for задаются 3 выражения: начальное значение, конечное значение и шаг приращения переменной:
for i := 1 to 35 by 4 do
задаёт цикл от 1 до 35 с шагом 4

В Python цикла со счётчиком тоже нет - там for используется для исключительно для итерации по элементам коллекции. Но там есть генератор, выдающий последовательность значений с заданным шагом, который можно использовать для имитации цикла со счётчиком:
for i in range(1, 36, 4):
Иван Долгов
Иван Долгов
85 548
Лучший ответ
Потому что в ЯП "С" ( и аналогичных по синтаксису ) никто не мешает вообще использовать любые конструкции для "последнего" оператора цикла

Например
for(n=12345;n;n/=10)arr[n%10]++;
Заполняет массив количеством цифр в числе

Для данного варианта цикла тоже будем придумывать дополнительный способ записи?
Потому что вы не понимаете последовательность интрукций в цикле
Цикл начинается ровно с того числа, которое указано в инициализации
Префиксный или постфиксный инкремент на это влиять не может
Цикл:
for (выражение1; выражение 2; выражение 3)
тело цикла;
.
работает так:
1.изначально и только 1 раз выполняется выражение1;
2.потом выражение 2;
3.потом тело цикла;
4.потом выражение 3;
и потом с шага 2 пока выражение 2 истинно
.
for (int i = 0; i < 10; ++i)
Martin Mkrtchyan
Martin Mkrtchyan
793
А кто его знает?! Придумали всякое...
Антон Шулунов Я не понял вас.