Цикли
Часте завдання програмування - багаторазове виконання однотипної дії. Наприклад, вивести клієнтів зі списку один за одним, або перебрати суми зарплат, і для кожної виконати однаковий код. Саме для таких цілей - багаторазового повторення однієї частини коду, використовуються цикли.
- Цикл - керуюча конструкція у високорівневих мовах програмування, призначена для організації багаторазового виконання набору інструкцій.
- Тіло циклу - послідовність інструкцій, призначена для багаторазового виконання.
- Ітерація - одноразове виконання тіла циклу.
- Умова виходу - вираз, що визначає, чи буде в черговий раз виконуватися ітерація, або цикл завершиться.
- Лічильник - змінна, що зберігає поточний номер ітерації. Цикл не обов'язково містить лічильник, і він не повинен бути один, умова виходу з циклу може залежати від декількох змінних, що змінюються в циклі.
Цикл 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
}