⚡ JavaScript

Цикл while и do-while в JavaScript (Node.js): подробное руководство

Цикл while и do-while в JavaScript

Что такое цикл и зачем он нужен?

Представь, что тебе нужно 100 раз написать в тетради: "Я буду учить программирование". Писать 100 раз одно и то же — скучно и долго. В программировании для таких повторяющихся действий существуют циклы. Цикл — это конструкция, которая позволяет выполнять один и тот же блок кода несколько раз, пока выполняется определённое условие.

Сегодня мы познакомимся с двумя видами циклов: while и do-while. Они работают по принципу: "Делай что-то, пока условие истинно".

Цикл while — "Пока... делай"

Цикл while работает так: сначала проверяется условие. Если оно истинно (true), выполняется тело цикла. Затем условие проверяется снова, и так до тех пор, пока условие не станет ложным (false).

Синтаксис:

while (условие) {
  // код, который будет повторяться
}

Пример 1: Выведем числа от 1 до 5.

let count = 1;
while (count <= 5) {
  console.log(count);
  count++; // увеличиваем счётчик на 1
}
// Вывод:
// 1
// 2
// 3
// 4
// 5

Важно! Если забыть увеличивать count, то условие count <= 5 будет всегда истинно, и цикл будет работать вечно — это называется бесконечным циклом. Твой компьютер может зависнуть!

Цикл do-while — "Сделай... пока"

Цикл do-while очень похож на while, но есть одно важное отличие: тело цикла выполняется хотя бы один раз, даже если условие изначально ложно. Сначала выполняется код, потом проверяется условие.

Синтаксис:

do {
  // код, который будет повторяться
} while (условие);

Пример 2: Используем do-while для обратного отсчёта от 3 до 1.

let number = 3;
do {
  console.log(number);
  number--;
} while (number >= 1);
// Вывод:
// 3
// 2
// 1

Пример 3: Покажем разницу между while и do-while. Если условие сразу ложно:

let x = 10;

// while — тело не выполнится ни разу
while (x < 5) {
  console.log("while: " + x);
}

// do-while — тело выполнится один раз
do {
  console.log("do-while: " + x);
} while (x < 5);
// Вывод:
// do-while: 10

Разбор типичных задач

Задача 1: Обратный отсчёт (как у доктора Элары Вэнс)

Доктор Вэнс запускает машину времени с начальной координаты n. Каждую секунду координата уменьшается на 1. Нужно вывести все значения от n до 1.

const readline = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});

readline.question('Введите начальную координату n: ', (n) => {
  n = Number(n);
  let current = n;
  
  while (current >= 1) {
    console.log('Текущая координата: ' + current);
    current--;
  }
  
  console.log('Эксперимент завершён!');
  readline.close();
});

Задача 2: Робот-шахтёр

Робот собирает кристаллы. Каждый кристалл даёт случайное количество энергии (от 5 до 20). Робот работает, пока сумма энергии не станет 100 или больше.

let energy = 0;
let crystalsCollected = 0;

while (energy < 100) {
  // Случайное число от 5 до 20
  let crystalEnergy = Math.floor(Math.random() * 16) + 5;
  energy += crystalEnergy;
  crystalsCollected++;
  console.log('Собран кристалл с энергией ' + crystalEnergy + 
              '. Всего энергии: ' + energy);
}

console.log('Сумка наполнена! Собрано кристаллов: ' + crystalsCollected);

Задача 3: Секретный агент

Вам поступают коды. Код 0 означает конец миссии. Нужно суммировать все коды, пока не встретится 0.

const readline = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});

let sum = 0;

function processCode() {
  readline.question('Введите код (0 для выхода): ', (code) => {
    code = Number(code);
    
    if (code === 0) {
      console.log('Миссия завершена! Сумма кодов: ' + sum);
      readline.close();
    } else {
      sum += code;
      processCode(); // рекурсивный вызов — аналог цикла
    }
  });
}

processCode();

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

  1. Бесконечный цикл. Забываешь изменить переменную в условии. Например:
    let i = 0;
    while (i < 5) {
      console.log('Привет!');
      // Забыл написать i++
    }
    Этот цикл будет работать вечно!
  2. Путаница между while и do-while. Помни: do-while выполняется минимум один раз. Если тебе нужно, чтобы код мог не выполниться ни разу — используй while.
  3. Ошибка на единицу. Например, хочешь вывести числа от 1 до 10, а пишешь while (i < 10) — выведется только до 9. Нужно while (i <= 10).
  4. Забыл про точку с запятой после do-while. После while (условие) в цикле do-while обязательно ставить ;.

Итоговый пример: Волшебный росток

Алекс посадил волшебный росток. Начальная высота — 2 см. Каждый день росток увеличивается в 1.5 раза. Алекс хочет узнать, через сколько дней росток станет выше 30 см.

let height = 2;        // начальная высота в см
let days = 0;
const targetHeight = 30;
const growthFactor = 1.5;

while (height < targetHeight) {
  height = height * growthFactor;
  days++;
  console.log('День ' + days + ': высота ' + height.toFixed(2) + ' см');
}

console.log('Росток достиг ' + targetHeight + ' см за ' + days + ' дней!');

Вывод программы:

День 1: высота 3.00 см
День 2: высота 4.50 см
День 3: высота 6.75 см
День 4: высота 10.13 см
День 5: высота 15.19 см
День 6: высота 22.78 см
День 7: высота 34.17 см
Росток достиг 30 см за 7 дней!

Когда какой цикл использовать?

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

Запомни: циклы — это мощный инструмент, который позволяет автоматизировать повторяющиеся действия. Тренируйся, и ты научишься решать самые разные задачи — от управления роботами до выращивания волшебных растений!