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 — только если взрослый и с билетом.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ