Цикл do... while

Цикл do... while

Технический фундамент do...while

do...while - это цикл с постусловием: тело выполняется до первой проверки, а затем условие оценивается для решения о следующей итерации. Поэтому первая итерация гарантирована независимо от стартового значения условия.

Ключевой момент: сначала выполнение тела, потом проверка условия.

Проверь себя: в каком сценарии это полезнее обычного while, где проверка идет сразу?

Базовый синтаксис

do {
  // код
} while (condition);

Смотри, что важно: точка с запятой после while (...) часть записи do...while. ASI иногда может "спасти", но надежнее ставить ; явно.

Пример:

let count = 0;

do {
  console.log(count);
  count++;
} while (count < 3);

Смотри, что важно: первая итерация будет в любом случае.

Сравнение с while

let x = 5;

while (x < 3) {
  console.log('while');
}

let y = 5;
do {
  console.log('do while');
} while (y < 3);

while не выполнится ни разу, а do...while выполнится один раз.

Здесь часто путаются: ожидают одинаковое поведение при одинаковом условии.

Мини-сценарий: показать меню хотя бы один раз

let shouldContinue = false;
let shown = 0;

do {
  shown++;
  console.log('Показываем меню');
} while (shouldContinue);

console.log(shown); // 1

Это типичная задача, где действие обязано произойти хотя бы раз.

Применение в повторных попытках

do...while уместен, когда первая попытка всегда должна быть сделана, а повтор зависит от результата.

let attempt = 0;
let success = false;

do {
  attempt++;
  success = attempt >= 2; // условный пример
} while (!success && attempt < 3);

Проверь себя: почему здесь логика "сначала попытка, потом проверка" естественна?

Дополнительный пример для новичка: минимум одна проверка пароля

const attempts = ['123', 'qwerty', 'secret'];
let i = 0;
let isValid = false;

do {
  const current = attempts[i] ?? '';
  isValid = current.length >= 6;
  i++;
} while (!isValid && i < attempts.length);

console.log(isValid); // true

Здесь do...while гарантирует хотя бы одну проверку, даже если массив попыток содержит всего один элемент.

Частые ошибки новичков

  • Забывать точку с запятой после while (...).
  • Не обновлять условие внутри цикла и получать зацикливание.
  • Использовать do...while там, где не нужно гарантированное первое выполнение.
  • Писать слишком сложные условия завершения.

Анти-провал: если первая итерация не обязана выполняться, чаще лучше выбрать while.

Что будет, если изменить входные данные

Если условие изначально ложное, do...while все равно выполнит тело один раз. Это может быть полезно (инициализация) или опасно (лишний запрос/изменение состояния), если не учесть семантику цикла.

Проверь себя: какие действия нельзя безопасно делать "обязательно один раз" без доп.проверки?

Краткий итог

  • do...while гарантирует минимум одну итерацию.
  • Он подходит для сценариев "сначала действие, потом проверка".
  • Отличие от while особенно важно на ложном стартовом условии.
  • Контроль обновления условия обязателен, иначе возможен бесконечный цикл.
  • Используй do...while осознанно, когда первое выполнение действительно необходимо.