1. Порівняння циклів: for vs while
Цикл while можна використовувати у всіх випадках, коли команду або групу команд потрібно виконати декілька разів. Але з усіх випадків один випадок варто виділити окремо.
Це випадок, коли програміст (автор програми) заздалегідь знає, скільки разів має виконатися його цикл. Зазвичай це вирішується введенням спеціальної змінної-лічильника, і кожну ітерацію циклу змінна збільшується (або зменшується) на 1.
Наче все працює, як треба, але не дуже зручно. Перед циклом ми задаємо стартове значення змінної-лічильника, потім в умові перевіряємо, чи досягла вона вже фінального значення. А от змінюємо її зазвичай у самому кінці тіла циклу.
А якщо тіло циклу велике? Або у нас декілька вкладених циклів? Загалом, хотілося б в таких випадках зібрати всю цю інформацію про змінну-лічильник в одному місці. Так у Java з'явився цикл for. Виглядає він теж не дуже складно:
for (команда1; умова; команда2)
{
блок команд
}
Якщо у циклі while у круглих дужках була тільки умова, тут ще додалися дві команди, розділені крапкою з комою.
Все насправді простіше, ніж здається: компілятор перетворює цикл for на звичайний цикл while таким чином:
команда1;
while (умова)
{
блок команд
команда2;
}
Чи краще продемонструємо на прикладі: два приклади нижче ідентичні.
| Варіант 1 | Варіант 2 |
|---|---|
|
|
Ми просто взяли і зібрали в одному місці весь код, який стосується змінної-лічильника — i.
команда1 у циклі for виконується тільки один раз перед самим циклом (це видно на другому прикладі)
команда2 виконується стільки ж разів, скільки і тіло циклу, але виконуватиметься кожного разу вже після того, як виконається все тіло циклу
2. Де використовується цикл for
Цикл for, мабуть, найвикористовуваніший варіант циклу в Java. Він застосовується всюди, тому що це просто зрозуміліша і зручніша форма запису циклу while для програмістів. Практично будь-який цикл while можна перетворити на цикл for.
Приклади:
| Цикл while | Цикл for |
|---|---|
|
|
|
|
|
|
|
|
|
|
Зверніть увагу на останній приклад. Там пропущено команди роботи з лічильником циклу. Немає лічильника — немає команд.
Java дозволяє не писати у циклі for «команду ініціалізації лічильника» і «команду зміни лічильника». І навіть вираз-умову циклу можна не писати.
3. Нюанси використання циклу for
Важливий момент щодо використання циклу for та операторів break і continue.
Оператор break у циклі for працює так само, як і в циклі while — приводить до негайного завершення циклу. А от continue приводить до пропуску тіла циклу, але не команди2 (яка змінює лічильник циклу).
Давайте ще раз подивимось, як пов'язані for і while.
for (команда1; умова; команда2)
{
блок команд
}
команда1;
while (умова)
{
блок команд
команда2;
}
Якщо в блоці команд циклу for викликати оператор continue, залишок блоку команд буде пропущено, а от команда2 (яка працює зі змінною-лічильником циклу for) все одно виконається.
Повернемось до нашого прикладу з пропуском чисел, які діляться на 7.
| Цей код зациклиться | Цей код буде працювати без проблем |
|---|---|
|
|
Код із використанням циклу while працювати не буде — i ніколи не перевищить 7. А от код із циклом for працюватиме відмінно.
4. Порівняння циклів for: Java vs Pascal
У Паскалі, до речі, теж є цикл For. Він взагалі є практично у всіх мовах програмування. Тільки в Паскалі він набагато зрозуміліший. Приклади:
| Pascal | Java |
|---|---|
|
|
|
|
|
|
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ