1. Базовий синтаксис вкладеного if
У реальному житті рішення рідко ухвалюють лише за одним критерієм. Зазвичай потрібно перевіряти кілька умов, і вони часто залежать одна від одної. Наприклад, щоб потрапити на концерт, недостатньо просто бути повнолітнім — іноді потрібно ще й бути у списку запрошених. Саме тут стає у пригоді багаторівнева логіка, а реалізувати її допомагають вкладені оператори if.
Вкладені умови — це випадок, коли один if розміщений усередині іншого. Уявіть «коробку в коробці»: якщо спрацювала зовнішня умова, лише тоді перевіряється внутрішня. Це потужний інструмент керування потоком виконання.
Почнемо з простого:
if (умоваА)
{
// дії, якщо умоваА — true (істина)
if (умоваБ)
{
// дії, якщо обидві умови істинні
}
}
if усередині іншого
if
Якщо це нагадує «коробку в коробці» — ви все правильно розумієте. Внутрішній if виконуватиметься лише тоді, коли спрацює зовнішня умова.
Приклад: вхід до клубу
Розширімо наш навчальний застосунок, у якому користувач раніше ввів імʼя та вік. Тепер додамо другий рівень перевірки: скажімо, щоб потрапити до закритого клубу, потрібно бути старше за 21 рік і мати запрошувальний код.
System.out.print("Введіть своє імʼя: ");
String name = console.nextLine();
System.out.print("Введіть свій вік: ");
int age = console.nextInt();
console.nextLine(); // скидання символу нового рядка після nextInt()
if (age >= 21)
{
System.out.print("Введіть запрошувальний код: ");
String code = console.nextLine();
if (code.equals("VIP2024"))
{
System.out.println("Ласкаво просимо, " + name + ", у VIP-клуб!");
}
else
{
System.out.println("Вибачте, неправильний код. Доступ заборонено.");
}
}
else
{
System.out.println("Вибачте, вхід лише з 21 року.");
}
Зверніть увагу: внутрішній if перевіряє код лише якщо вік уже пройшов перевірку. Це економить ресурси (і нерви охоронця).
2. Скільки рівнів вкладеності припустимо?
Технічно — скільки завгодно. Але на практиці: що більше рівнів, то складніше читати й підтримувати код. Зазвичай намагаються обмежуватися 2–3 рівнями. Якщо виходить «драбинка» з 4 і більше вкладених if, подумайте, чи не можна спростити логіку або винести перевірки в окремі методи.
3. Вкладені if і else: пастки та нюанси
Типова помилка новачків: недбале використання фігурних дужок.
У Java для використання else є жорстке правило: без фігурних дужок {} до if або else належить лише перша інструкція після них. Це часте джерело прикрих багів.
Приклад із потенційною помилкою:
if (age >= 21)
if (code.equals("VIP2024"))
System.out.println("Ласкаво просимо!");
else
System.out.println("Неправильний код.");
Багато хто очікує, що else належатиме до перевірки віку, але насправді цей else належить до найближчого перед ним if (перевірки запрошувального коду). Тому повідомлення можуть виводитися не так, як очікувалося. Краще завжди використовувати фігурні дужки — навіть якщо всередині лише один рядок.
Компілятор трактує цей код саме так:
if (age >= 21)
{
if (code.equals("VIP2024"))
System.out.println("Ласкаво просимо!");
else
System.out.println("Неправильний код.");
}
Важливо: ще раз: якщо в конструкції if-else не встановлено фігурні дужки, else належить до попереднього (найближчого) if.
4. Альтернативи: else if у вкладених умовах
Інколи всередині зовнішнього if потрібно не лише перевірити одну додаткову умову, а й передбачити альтернативу. Наприклад, якщо запрошувальний код не підійшов, можна запропонувати гостьовий доступ або відмовити.
if (age >= 21)
{
System.out.print("Введіть запрошувальний код: ");
String code = console.nextLine();
if (code.equals("VIP2024"))
{
System.out.println("Ласкаво просимо до клубу!");
}
else if (code.equals("GUEST"))
{
System.out.println("Гостьовий режим: доступ лише до 23:00.");
}
else
{
System.out.println("На жаль, доступ неможливий.");
}
}
else
{
System.out.println("Вхід лише з 21 року.");
}
Тут, усередині зовнішньої перевірки, ми робимо вкладений вибір між трьома сценаріями: VIP‑код, гостьовий код і відмова.
5. Практика: калькулятор знижки з багаторівневою логікою
Нарахуємо користувачеві знижку на основі віку та наявності клубної картки.
- Якщо вік користувача більший або дорівнює 60 — знижка 15 %.
- Якщо вік менший, але в користувача є клубна картка — знижка 7 %.
- В інших випадках знижки немає.
Як це реалізувати?
System.out.print("Введіть свій вік: ");
int age = console.nextInt();
double discount = 0.0;
if (age >= 60)
{
discount = 0.15;
}
else
{
System.out.print("Чи є у вас клубна картка (так/ні)? ");
String hasCard = console.nextLine();
if (hasCard.equals("так"))
{
discount = 0.07;
}
}
System.out.println("Ваша знижка: " + (discount * 100) + "%");
Тут ми використали вкладений if усередині гілки else: якщо вік не підходить, лише тоді питаємо про картку.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ