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