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