Цикл 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 хорошо работает в сценариях повторных попыток и проверок до выполнения следующего шага.