LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

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

int i = a;
while (i <= b) {
  body;
  if (i < INT_MAX) {
    i = i + 1;
  } else {
    break;
  }
}

Намного лучше и понятней получилось.

Вся проблема текущего for в том, что он в одну строку засовывает три нетривиальные операции. И ещё заставляет не просто в одну строку их сувать, но и даже в одно выражение каждую. Это просто антипаттерн. Если ты напишешь в коде

int x = 0; y = 2; i++;

то тебя попросят переписать этот код.

Если ты напишешь в коде

int x = y = 2, i++, 3;

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

Но в for это всё норма жизни почему-то считается…

Единственное, чем for лучше while в этой инкарнации - весь код, работающий с переменной цикла собран в одном месте, а также нельзя случайно сломать цикл с помощью continue.

К слову, можно сделать так, решая эту проблему, забавно даже:

int i = a;
while (i < b) {
  defer i = i + 1;
  body;
}

Исправление vbr, :

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

int i = a;
while (i <= b) {
  body;
  if (i < INT_MAX) {
    i = i + 1;
  } else {
    break;
  }
}

Намного лучше и понятней получилось.

Вся проблема текущего for в том, что он в одну строку засовывает три нетривиальные операции. И ещё заставляет не просто в одну строку их сувать, но и даже в одно выражение каждую. Это просто антипаттерн. Если ты напишешь в коде

int x = 0; y = 2; i++;

то тебя попросят переписать этот код.

Если ты напишешь в коде

int x = y = 2, i++, 3;

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

Но в for это всё норма жизни почему-то считается…

Исходная версия vbr, :

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

int i = a;
while (i <= b) {
  body;
  if (i < INT_MAX) {
    i = i + 1;
  } else {
    break;
  }
}

Намного лучше и понятней получилось.

Вся проблема текущего for в том, что он в одну строку засовывает три нетривиальные операции. И ещё заставляет не просто в одну строку их сувать, но и даже в одно выражение каждую. Это просто антипаттерн. Если ты напишешь в коде

int x = 0; y = 2; i++;

то тебя попросят переписать этот код.

Если ты напишешь в коде

int x = y = 2, i++, 3;

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

Но в for это всё норма жизни почему-то…