1. Логічний тип даних: bool
Як ми вже переконалися, у C# є дуже корисний оператор — if-else. Він виконує один блок команд, якщо умова в дужках істинна, і інший блок, якщо умова хибна.
Щоб зручно працювати з виразами, які можуть бути істинними або хибними, у C# існує спеціальний тип — bool. Його головна особливість у тому, що змінні цього типу можуть набувати лише двох значень: true (істина) і false (хиба).
Жодних інших значень змінним типу bool присвоїти неможливо. Компілятор цього не дозволить.
Приклади змінних типу bool:
bool isAdult = true;
bool hasMoney = false;
Змінна типу bool має лише два значення — true (істина) і false (хиба). І все. Майже як у тесті — або «складено», або «провалено».
2. Операції порівняння
Навіщо потрібен такий примітивний тип? Справжня сила bool розкривається, коли ми будуємо логічні вирази. Їх зазвичай формують за допомогою операторів порівняння.
| Оператор | Призначення | Приклад | Значення |
|---|---|---|---|
| == | Дорівнює | |
true або false |
| != | Не дорівнює | |
true або false |
| > | Більше | |
true або false |
| < | Менше | |
true або false |
| >= | Більше або дорівнює | |
true або false |
| <= | Менше або дорівнює | |
true або false |
Приклад:
int age = 20;
bool isAdult = age >= 18; // true (20 більше або дорівнює 18)
bool isTeenager = age >= 13 && age < 18; // false (20 не менше 18)
bool isEven = age % 2 == 0; // true (20 ділиться на 2 без остачі)
Тут значення змінної isAdult дорівнюватиме true, адже 20 — це вже дорослий вік.
Важливий момент 1:
Оператори, що складаються з двох символів, не можна розділяти.
a < = 10
speed > = max
age = = 18
time ! = 0
Важливий момент 2:
Зверніть увагу, що операторів => і =< не існує: є лише <= і >=. Якщо ви напишете a =< 3, код просто не скомпілюється.
Важливий момент 3:
У C# не можна записати вираз 18 < age < 65. У виразі 18 < age результатом буде true або false. А порівнювати true < 65 (різні типи) не можна. Принаймні, у C#.
3. Логічні операції
У C# не можна записати вираз 18 < age < 65 — це синтаксична помилка, і програма не скомпілюється.
Натомість можна записати так:
(18 < age) І (age < 65)
Звісно, замість слова І тут буде інший логічний оператор — і зараз якраз про них поговоримо.
У C# є три логічні оператори: AND (і), OR (або) і NOT (не).
Добра новина: за допомогою дужок можна будувати логічні вирази будь-якої складності.
Погана новина: розробники C# вирішили замість слів and, or і not використовувати позначення з C++.
| Логічний оператор | Очікування | Реальність |
|---|---|---|
| І (∧) | and | && |
| АБО (∨) | or | || |
| НЕ (¬) | not | ! |
Ось кілька прикладів використання логічних операторів у C#:
| Вираз | Розшифровка | Пояснення |
|---|---|---|
| (0 < a) && (a < 100) | (0 < a) and (a < 100) | (0 < a) І (a < 100) |
| (!a) && (!b) | (not a) and (not b) | (НЕ a) І (НЕ b) |
| !(!a || !b) | not((not a) or (not b)) | НЕ((НЕ a) АБО (НЕ b)) |
4. Таблиці істинності
Коротко пройдімося логічними операціями.
Оператор AND
Оператор AND, він же І, він же &&, він же конʼюнкція, він же логічне множення.
| Вираз | Результат |
|---|---|
| true && true | true |
| true && false | false |
| false && true | false |
| false && false | false |
Інакше кажучи, результат виразу дорівнює true (істина) лише якщо обидва значення, що беруть участь у виразі, дорівнюють true (істина). В інших випадках — завжди false (хиба).
Оператор OR
Оператор OR, він же АБО, він же ||, він же дизʼюнкція, він же логічне додавання.
| Вираз | Результат |
|---|---|
| true || true | true |
| true || false | true |
| false || true | true |
| false || false | false |
Інакше кажучи, результат виразу дорівнює true (істина) завжди, коли хоча б одне значення, що бере участь у виразі, дорівнює true (істина). Якщо обидва дорівнюють false, результат — false.
Оператор NOT
Оператор NOT, він же НЕ, він же !, він же інверсія.
| Вираз | Результат |
|---|---|
| ! true | false |
| ! false | true |
Змінює true на false і навпаки.
Корисні вирази:
| Вираз | Результат |
|---|---|
| m && !m | false |
| m || !m | true |
| !(a && b) | !a || !b |
| !(a || b) | !a && !b |
5. Приклади логічних операцій: and, or, not
Операція «І», AND, позначається &&
Результат — істина лише тоді, коли обидві умови істинні.
int age = 16;
bool hasTicket = true;
bool canAttend = age >= 14 && hasTicket; // true (16 більше 14 і квиток є)
Якщо вам 14 і у вас є квиток — проходьте!
Операція «АБО», OR, позначається (||)
Результат — істина, якщо хоча б одна умова істинна.
bool isAdmin = false;
bool isModerator = true;
bool canEdit = isAdmin || isModerator; // true (можна редагувати, якщо принаймні одна з умов дорівнює true)
Якщо ви адміністратор або модератор — будь ласка, натискайте кнопки!
Операція «НЕ», NOT, позначається (!)
Оператор інверсії перетворює істину на хибу й навпаки.
bool isWeekend = false;
bool shouldGoToWork = !isWeekend; // true (якщо не вихідні, працюємо)
Якщо НЕ вихідні — час працювати!
Комбінування: будуйте умови будь-якої складності
Можна комбінувати скільки завгодно логічних операцій (головне — не перестаратися). Дужки можна (і варто) використовувати для зрозумілості.
Приклад:
int age = 17;
bool hasTicket = false;
bool isVip = true;
bool canGo = (age >= 18 && hasTicket) || isVip; // true, адже isVip = true
У цьому прикладі логіка така: якщо людина повнолітня й має квиток, або якщо вона VIP — пропускаємо. Якщо не VIP — лише якщо доросла й має квиток.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ