Цикл while
Цикл while
Технический фундамент while
while - это цикл с предусловием: перед каждой итерацией выражение условия вычисляется заново.
Тело выполняется только если условие истинно в момент проверки, поэтому количество итераций определяется динамикой состояния.
Ключевой момент: while ориентирован на логическое условие продолжения, а не на фиксированный счетчик.
Проверь себя: почему while удобен для повторных попыток, где число итераций нельзя предсказать заранее?
Базовый синтаксис
while (condition) {
// код
}
Пример:
let attempts = 0;
while (attempts < 3) {
console.log('try', attempts);
attempts++;
}
Смотри, что важно: условие проверяется перед каждой итерацией.
Риск бесконечного цикла
Если внутри цикла не менять данные, влияющие на условие, цикл может не закончиться.
let count = 0;
while (count < 5) {
console.log(count);
// count++ забыли -> бесконечный цикл
}
Здесь часто путаются: "код завис" не из-за браузера, а из-за логики условия.
Анти-провал: всегда явно показывай в теле цикла, где обновляется переменная условия.
while с break
Иногда выход из цикла зависит от дополнительного события.
let i = 0;
while (true) {
if (i === 5) break;
console.log(i);
i++;
}
Это рабочий шаблон, но используй его аккуратно, чтобы не потерять читаемость.
Мини-сценарий: ожидание валидного ввода
let value = '';
let index = 0;
const inputs = ['', ' ', 'ok'];
while (value.trim() === '' && index < inputs.length) {
value = inputs[index];
index++;
}
console.log(value); // ok
Такая логика часто встречается в обработке пользовательского ввода и повторных попытках.
После цикла обычно делают пост-проверку: найдено ли валидное значение, или нужен fallback.
if (value.trim() === '') {
console.log('no valid value');
}
Проверь себя: почему здесь нужна двойная защита в условии (trim() и index < length)?
Дополнительный пример для новичка: обработка очереди задач
const queue = ['task-1', 'task-2', 'task-3'];
while (queue.length > 0) {
const task = queue.shift();
console.log('process:', task);
}
console.log(queue.length); // 0
Этот пример показывает, как условие queue.length > 0 естественно управляет количеством итераций без отдельного счетчика.
Частые ошибки новичков
- Не обновлять переменную, участвующую в условии.
- Писать слишком сложное условие, которое трудно проверить глазами.
- Не учитывать пустые/пограничные входы.
- Использовать
whileтам, где проще и безопаснееfor.
Анти-провал: если количество итераций известно заранее, чаще проще выбрать for.
Что будет, если изменить входные данные
Если массив inputs пустой, цикл не выполнится ни разу - это нормально. Если все элементы пустые, переменная останется пустой, и нужен fallback после цикла. Такие edge case стоит планировать заранее.
Проверь себя: какую пост-проверку добавить после while, чтобы корректно обработать "валидное значение не найдено"?
Краткий итог
whileповторяет код, пока условие истинно.- Он полезен, когда число итераций заранее неизвестно.
- Главный риск - бесконечный цикл при неверном обновлении состояния.
- Важны читаемое условие и явная точка изменения переменной.
whileхорошо работает в сценариях повторных попыток и проверок до выполнения следующего шага.