Цикли
Часте завдання програмування - багаторазове виконання однотипної дії. Наприклад, вивести клієнтів зі списку один за одним, або перебрати суми зарплат, і для кожної виконати однаковий код. Саме для таких цілей - багаторазового повторення однієї частини коду, використовуються цикли.
- Цикл - керуюча конструкція у високорівневих мовах програмування, призначена для організації багаторазового виконання набору інструкцій.
- Тіло циклу - послідовність інструкцій, призначена для багаторазового виконання.
- Ітерація - одноразове виконання тіла циклу.
- Умова виходу - вираз, що визначає, чи буде в черговий раз виконуватися ітерація, або цикл завершиться.
- Лічильник - змінна, що зберігає поточний номер ітерації. Цикл не обов'язково містить лічильник, і він не повинен бути один, умова виходу з циклу може залежати від декількох змінних, що змінюються в циклі.
Цикл while
Цикл з передумовою — цикл, який виконується, доки правдива якась умова, зазначена до його початку. Ця умова перевіряється до виконання тіла циклу, тому тіло може не виконатися жодного разу, якщо умова від самого початку - хибна.
while (condition) {
// код, тіло циклу (statement)
}
Конструкція while створює цикл, який виконує блок коду, доки умова перевірки оцінюється як true.
condition, тобто умова, оцінюється перед кожною ітерацією циклу.- Якщо
conditionоцінюється якtrue, операторwhileвиконуєstatement. - Якщо
conditionоцінюється якfalse, виконання циклу переривається і скрипт продовжує виконувати інструкції після циклуwhile.
Блок-схема ілюструє цикл while.

Створимо лічильник.
let counter = 0;
while (counter < 10) {
console.log("counter: ", counter);
counter += 1;
}
Будемо заповнювати місця в готелі доти, доки поточна кількість клієнтів не буде дорівнювати максимально можливій.
let clientCounter = 18;
const maxClients = 25;
while (clientCounter < maxClients) {
console.log(clientCounter);
clientCounter += 1;
}
Цикл do...while
Цикл з постумовою - цикл, в якому умова перевіряється після виконання тіла циклу. З цього випливає, що тіло завжди виконується хоча б один раз.
do {
// statement
} while (condition);
Конструкція do...while створює цикл, який виконує блок коду доти, доки condition не поверне false.
На відміну від циклу while, цикл do...while завжди виконує statement мінімум один раз, перш ніж він оцінить condition.
Всередині циклу потрібно внести зміни в деяку змінну, щоб переконатися, що вираз дорівнює false після ітерацій. Інакше буде нескінченний цикл.
Блок-схема ілюструє цикл do-while

let password = "";
do {
password = prompt("Введіть пароль довший 4-х символів", "");
} while (password.length < 5);
console.log("Ввели пароль: ", password);
Цикл for
Цикл з лічильником - цикл, в якому певна змінна змінює своє значення із заданого початкового до кінцевого значення з деяким кроком, і для кожного значення цієї змінної тіло циклу виконується один раз.
В більшості процедурних мов програмування реалізується конструкцією
for, в якій зазначається лічильник, необхідна кількість ітерацій і крок, з яким змінюється лічильник.
for (initialization; condition; post-expression) {
// statements
}
Алгоритм виконання циклу for:
- Ініціалізація (initialization) - виконується один раз до початку циклу. Використовується для створення змінної-лічильника і зазначення її початкового значення.
- Умова (condition) - вираз, що оцінюється перед кожною ітерацією (повторенням) циклу. Тіло циклу виконується тільки тоді, коли вираз приводиться до
true. Цикл завершується, якщо значення будеfalse. - Тіло (statements) - набір інструкцій для виконання на кожному повторенні.
Виконується, якщо вираз умови приводиться до
true. - Пост-вираз (post-expression) - виконується в кінці кожного повторення циклу, до перевірки умови. Використовується для оновлення змінної-лічильника.
Змінні-лічильники, за традицією, називаються літерами i, j і k.
for (let i = 0; i <= 20; i += 5) {
console.log(i);
}
У прикладі оголошується змінна-лічильник i, ініціалізується значенням 0 і цикл виконується доти, доки i <= 20, тобто умова приводиться до true. Після кожної ітерації лічильник збільшується на 5.
Порахуємо суму чисел до певного значення.
const target = 3;
let sum = 0;
for (let i = 0; i <= target; i += 1) {
sum += i;
}
console.log(sum);
Згадаємо про операцію a % b і виведемо остачу від ділення за допомогою циклу.
const max = 10;
for (let i = 0; i < max; i += 1) {
console.log(`${max} % ${i} = `, max % i);
}
Оператор break
Перервати виконання циклу можна в будь-який момент. Для цього існує оператор break, який повністю припиняє виконання циклу і передає управління на
рядок після його тіла.
Знайдемо число 3. Щойно виконається умова if, цикл припинить своє виконання (буде перерваний).
for (let i = 0; i <= 5; i += 1) {
console.log(i);
if (i === 3) {
console.log("Знайшли число 3, перериваємо виконання циклу");
break;
}
}
console.log("Лог після циклу");
Оператор continue
Перериває не увесь цикл, а тільки виконання поточної ітерації. Його використовують, якщо зрозуміло, що на поточній ітерації циклу більше немає що робити або взагалі не потрібно нічого робити, і час переходити до наступної ітерації.
Використовуємо цикл для введення тільки непарних чисел. Для парних i спрацьовує continue, виконання тіла припиняється і управління передається до наступної ітерації.
const number = 10;
for (let i = 0; i < number; i += 1) {
if (i % 2 === 0) {
continue;
}
console.log("Непарне i: ", i); // 1, 3, 5, 7, 9
}