Цикл 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осознанно, когда первое выполнение действительно необходимо.