— Приветствую, Амиго! Я так увлекся решением логических задачек, что не заметил как ты пришёл. Вот одна для тебя: если крокодилы летают, то снег — белый. Вон летает крокодил. Какой вывод?
— Эмм… Значит, снег — белый?
— Отлично. Тест-инициация пройден. Ты готов усвоить следующую тему. Называется она “Логические операции”. И начнём мы с булевой логики. Инстинктивно ты и так её знаешь. Ты же робот. Только нужно подкрутить твои настройки под язык Java.
— Булева логика? Мне тут недавно рассказывали о типе boolean...
— Да, здесь есть прямая связь. Булевы выражения могут быть только true или false. И эта самая логика изучает выражения, которые true или false, их сочетания. Например, выражение 18 < 25 — всегда true, а 7 < 5 — всегда false. Выражение (i < 10) зависит от значения i. И если оно, например, равно true, мы можем попросить программу что-нибудь сделать.
— Ааа, я понял. Булевы выражения помогают делать не только логические выводы, но и развилки в программах.
— Именно так. Главное научиться их записывать. Скажем, в Java нельзя просто взять — и записать выражение 18 < age < 65. Оно будет синтаксически некорректным и программа не скомпилируется.
— Зато можно записать его так:
(18 < age) И (age < 65)
Разумеется, слова И на русском не подойдёт. Там будет логический оператор, который означает “И”, но пишется по-другому.
— В Java есть три логических оператора: AND (и), OR (или) и NOT (не).
Хорошая новость: используя скобки, можно построить логические выражения любой сложности.
Плохая новость: разработчики Java решили вместо слов and, or и not, использовать обозначения из языка C.
Внимание на экран:
| Логический оператор | Ожидание | Реальность |
|---|---|---|
И (∧) |
and |
&& |
ИЛИ (∨) |
or |
|| |
НЕ (¬) |
not |
! |
— На самом деле всё не так плохо… Довольно лаконично. Я уже почти их запомнил.
— Вот и славно. Держи несколько примеров использования логических операторов в Java:
| Выражение | Расшифровка | Пояснение |
|---|---|---|
(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)) |
Примеры использования операторов сравнения и булевых переменных
— Запомни, Амиго: там, где можно написать логическое выражение, можно написать и логическую переменную.
— Это как?
— Я имею в виду, что ты можешь записывать логические выражения по-разному. Например:
| Код | Пояснение |
|---|---|
|
Если значение age лежит между 18 и 65, на экран выводится текст «вы можете работать». |
|
Мы создали переменную isYoung и вынесли в нее первую часть выражения. Только заменили age >= 18 на age < 18. |
|
Мы создали переменную isOld и вынесли в нее вторую часть выражения. При этом заменили age <= 65 на age > 65. |
— Эти три примера эквивалентны. Только во втором мы вынесли часть выражения из условия if в отдельную логическую переменную – isYoung. В третьем примере мы вынесли вторую часть выражения во вторую переменную — isOld. Кстати, по умолчанию значение логической переменной равно false.
— Я это запомню. Надеюсь.
Логическая арифметика
— А теперь вкратце пройдемся по логическим операциям. Они подчиняются очень простым и логичным (как может быть иначе!) правилам.
— Для начала давай посмотрим, как работает оператор OR, он же ИЛИ, он же ||, он же дизъюнкция.
| Выражение | Результат |
|---|---|
true || true |
true |
true || false |
true |
false || true |
true |
false || false |
false |
— Можешь теперь подытожить, чему равен результат выражения a || b согласно таблице?
— Насколько я понял, результат выражения равен true (истина), если хотя бы одно значение, участвующее в выражении, равно true (истина). Если оба равны false, то результат false.
— Всё верно. Раз ты такой умный, посмотри ещё раз на табличку и представь, что false — это 0, а true — это 1. В таком случае тебе поведение оператора || ничего не напоминает из обычной арифметики?
— Эмм… Ну немного похоже на операцию сложения… Только вот 1 + 1 не равно 1.
— В каком-то смысле равно, если мы работаем только с 0 и 1. Но этим сейчас не заморачивайся. Главное, что ты уловил сходство операции OR со сложением. Так что теперь тебя не удивит тот факт, что эту операцию часто называют “Логическим сложением”.
— Понял.
— Теперь на сцене оператор AND, он же И, он же &&, он же конъюнкция.
| Выражение | Результат |
|---|---|
true && true |
true |
true && false |
false |
false && true |
false |
false && false |
false |
— Вижу! Результат выражения равен true (истина) только если оба значения, которые участвуют в выражении, равны true (истина). В остальных случаях — всегда false (ложь).
— Молодец, Амиго, хватаешь на лету. А на что похоже из арифметики?
— На умножение!
— Точно. Поэтому здесь у нас “логическое умножение”.
— Оператор NOT, он же НЕ, он же !, он же инверсия.
| Выражение | Результат |
|---|---|
!true |
false |
!false |
true |
— Ну, здесь всё совсем просто. Оператор меняет true на false и наоборот.
— Именно так. Вот тебе напоследок несколько полезных выражений:
| Выражение | Результат |
|---|---|
m && !m |
false |
m || !m |
true |
!(a && b) |
!a || !b |
!(a || b) |
!a && !b |
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ