Умовні конструкції в C# дають змогу програмі приймати рішення та виконувати різні блоки коду залежно від заданих умов.
Завдяки розгалуженню можна перевіряти введені користувачем дані, визначати права доступу, обробляти результати операцій і керувати логікою застосунку.
У C# для цього найчастіше використовують оператори if, else if, else, switch, вираз switch і тернарний оператор ?:.
У цьому матеріалі розглянемо синтаксис кожної конструкції, приклади використання та типові помилки.
1. Оператор if
Оператор if виконує блок коду лише тоді, коли умова має значення
true.
int x = 11;
if (x > 2)
{
Console.WriteLine($"Число {x} більше за 2");
}
Умова записується в круглих дужках. У C# вона повинна мати тип bool,
тобто результатом перевірки має бути true або false.
Наприклад:
int age = 20;
if (age >= 18)
{
Console.WriteLine("Доступ дозволено");
}
Якщо умова age >= 18 істинна, програма виконає тіло оператора if.
2. Конструкції if else та else if
Якщо потрібно передбачити альтернативний сценарій, використовуйте
else. Цей блок виконується, коли умова в if не виконується.
int x = 1;
if (x > 2)
{
Console.WriteLine($"Число {x} більше за 2");
}
else
{
Console.WriteLine($"Число {x} не більше за 2");
}
Для перевірки кількох умов послідовно використовується else if:
int x = 11;
if (x > 2)
{
Console.WriteLine($"Число {x} більше за 2");
}
else if (x < 2)
{
Console.WriteLine($"Число {x} менше за 2");
}
else
{
Console.WriteLine("Число дорівнює 2");
}
У цьому прикладі останній блок else важливий: без нього випадок
x == 2 залишився б необробленим.
У конструкції if / else if / else перевірки виконуються зверху вниз.
Після першої істинної умови відповідний блок виконується, а решта гілок
пропускається.
3. Логічні оператори в умовах
Умови можна об’єднувати за допомогою логічних операторів.
Оператор Назва Приклад
&& логічне І (AND) age >= 18 && hasTicket
|| логічне АБО (OR) isAdmin || isOwner
! логічне НЕ (NOT) !isBlocked
Приклад перевірки декількох умов:
int age = 25;
bool hasTicket = true;
if (age >= 18 && hasTicket)
{
Console.WriteLine("Вхід дозволено");
}
else
{
Console.WriteLine("Вхід заборонено");
}
Оператор && використовує коротке замикання: якщо перша умова вже
дорівнює false, друга не обчислюється. Для || діє протилежне
правило: якщо перша умова дорівнює true, друга не потрібна.
4. Оператор switch
Оператор switch зручний, коли потрібно порівняти одне значення з
кількома можливими варіантами. Він часто робить код читабельнішим за
довгий ланцюжок if / else if.
string selection = "Y";
switch (selection)
{
case "Y":
Console.WriteLine("Ви натиснули клавішу Y");
break;
case "N":
Console.WriteLine("Ви натиснули клавішу N");
break;
default:
Console.WriteLine("Невідома команда");
break;
}
Основні елементи оператора:
switch— значення, яке перевіряється;case— один із можливих варіантів;break— завершує виконання поточної секціїswitch;default— гілка, яка виконується, якщо жоденcaseне підійшов.
Гілка default необов’язкова, але її корисно додавати для обробки
неочікуваних значень.
Кілька значень для одного сценарію
Якщо різні значення мають виконувати однакову дію, можна об’єднати
секції case:
char command = 'w';
switch (command)
{
case 'w':
case 'W':
Console.WriteLine("Рух угору");
break;
case 's':
case 'S':
Console.WriteLine("Рух униз");
break;
default:
Console.WriteLine("Невідома команда");
break;
}
5. Вираз switch (switch expression)
Починаючи з C# 8.0, доступний вираз switch. На відміну від звичайного
оператора switch, він повертає значення. Це зручно, коли потрібно
вибрати результат залежно від вхідного параметра.
int dayNumber = 2;
string dayName = dayNumber switch
{
1 => "Понеділок",
2 => "Вівторок",
3 => "Середа",
4 => "Четвер",
5 => "П'ятниця",
6 => "Субота",
7 => "Неділя",
_ => "Невідомий день"
};
Console.WriteLine(dayName);
Символ _ — discard pattern. У цьому прикладі він відповідає
будь-якому значенню, для якого не підійшли попередні варіанти.
6. Тернарний оператор ?:
Тернарний оператор — короткий спосіб записати просту умовну
конструкцію if / else, коли потрібно отримати одне з двох значень.
Синтаксис:
умова ? значення_якщо_true : значення_якщо_false;
Приклад:
int age = 20;
string result = age >= 18 ? "Повнолітній" : "Неповнолітній";
Console.WriteLine(result);
Тернарний оператор також можна використовувати для обчислення:
string selection = "Y";
int result = selection == "Y" ? 1 + 2 : 3 - 1;
Console.WriteLine(result); // 3
Не варто вкладати багато тернарних операторів один в одного: такий запис
складніше читати й підтримувати. Для кількох сценаріїв краще підійдуть
if / else if або switch.
7. Що вибрати: if, switch чи тернарний оператор?
Конструкція Коли використовувати
if Для однієї умови
if / else Для двох альтернативних сценаріїв
if / else if / else Для послідовної перевірки різних умов
switch Для вибору дії серед кількох варіантів
switch expression Для повернення значення залежно від варіанта
?: Для короткого вибору одного з двох значень
Орієнтуйтеся насамперед на зрозумілість коду. Якщо умови складні або
містять різні діапазони значень, if / else if часто буде доречнішим.
Якщо потрібно зіставити одне значення з набором конкретних варіантів,
зазвичай зручніший switch.
8. Типові помилки під час використання умов
8.1. Використання = замість ==
Оператор = присвоює значення, а == порівнює значення.
int number = 5;
if (number == 5)
{
Console.WriteLine("Число дорівнює 5");
}
8.2. Відсутність обробки граничного випадку
Перевірки x > 2 та x < 2 не охоплюють випадок x == 2. Якщо цей
сценарій має значення для логіки програми, додайте else або окрему
умову.
8.3. Надто складні умови
Довгі логічні вирази важко читати. Їх можна розбити на окремі булеві змінні з промовистими назвами:
bool isAdult = age >= 18;
bool hasAccess = isAdult && hasTicket;
if (hasAccess)
{
Console.WriteLine("Доступ дозволено");
}
8.4. Надмірне використання вкладених умов
Якщо вкладені if стають глибокими, спробуйте об’єднати умови,
використати ранній вихід із методу або перейти до switch, якщо це
робить логіку зрозумілішою.
9. Практичні завдання
Спробуйте закріпити матеріал на невеликих прикладах:
- Перевірка парності. Напишіть програму, яка визначає, чи є ціле число парним або непарним.
- Оцінка. За числовим балом від 0 до 100 визначте рівень
результату за допомогою
if / else if / else. - День тижня. За номером від 1 до 7 виведіть назву дня за
допомогою
switch. - Доступ до системи. Перевірте вік користувача та наявність
дозволу, використовуючи
&&. - Тернарний оператор. Визначте, чи є число додатним або від’ємним,
використовуючи
?:.
10. Часті запитання (FAQ)
Що таке умовна конструкція в C#?
Умовна конструкція — це засіб керування потоком виконання програми, який дає змогу виконати певний код залежно від результату логічної перевірки.
Чим відрізняються if та switch?
if перевіряє довільні булеві умови, зокрема порівняння та діапазони.
switch зіставляє значення з набором варіантів і зручний для вибору
однієї гілки серед багатьох.
Чи обов’язково використовувати default у switch?
Ні, секція default необов’язкова. Проте вона корисна, якщо потрібно
передбачити поведінку для значень, які не збігаються з жодним case.
Коли краще використовувати тернарний оператор?
Коли потрібно коротко вибрати одне з двох значень. Якщо логіка складна
або містить кілька дій, краще використати звичайний if / else.
Який тип має повертати умова if?
Умова if у C# повинна мати тип bool. На відміну від деяких інших
мов, числове значення не можна безпосередньо використовувати як логічну
умову.
Висновок
Умовні конструкції — одна з основ керування потоком виконання програми
в C#. if / else підходить для перевірки логічних умов, switch —
для вибору між багатьма варіантами, а тернарний оператор ?: допомагає
компактно записати простий вибір значення.
Вибирайте конструкцію, яка найкраще передає логіку програми та залишається зрозумілою для інших розробників.
Корисні посилання
- Документація Microsoft: оператор if
- Документація Microsoft: оператор switch
- Документація Microsoft: вираз switch
- Документація Microsoft: умовний оператор ?:
Інтерактивний приклад
Спробуйте змінити значення змінних і перевірити, як змінюється результат виконання коду.
