Программирование на языке Scala/Логические выражения
Логические выражения - это выражения, которые содержат логические операторы и вычисляются в логическое значение true
или false
. Они используются для описания условий и логических отношений. Логические выражения позволяют принимать решения в зависимости от истинности или ложности своих параметров. Логические значения могут храниться в типе Boolean.
Логические операторы, примеры на основе значений
val a: Boolean = true
val b: Boolean = false
val c: Int = 10
val d: Int = 20
операторы | описание | примеры |
---|---|---|
== | Равно | c == d результат операции false |
! = | Не равно | c ! = d результат операции true |
> | Более | c > d результат операции false |
< | Менее | c < d результат операции true |
> = | Больше или равно | c > = d результат операции false |
<= | Меньше или равно | c <= b результат операции true |
&& | Сокращенное логическое И (AND) конъюнкция | a && b результат операции false |
& | Полное логическое И (AND) конъюнкция | a & b результат операции false |
|| | Сокращенное логическое ИЛИ (OR) дизъюнкция | a || b результат операции true |
| | Полное логическое ИЛИ (OR) дизъюнкция | a | b результат операции true |
! | Логическое НЕ (Not) | ! b результат операции true |
^ | Логическое исключающее ИЛИ (XOR) | a ^ b результат операции true |
Операции && и || — сокращенно вычисляемые: выражения, построенные с помощью этих операторов, вычисляются, только когда это имеет смысл. Иными словами, правая часть выражений с использованием && и || не будет вычисляться, если результат уже определился при вычислении левой части. Например, если левая часть выражения с методом && вычисляется в false, то результатом выражения, несомненно, будет false, поэтому правая часть не вычисляется. Аналогично этому, если левая часть выражения с методом || вычисляется в true, то результатом выражения, конечно же, будет true, поэтому правая часть не вычисляется.
val x: Boolean = 1 > 2
val y: Boolean = 2 > 1
val a = y || x //x не имеет смысла вычислять и он не вычисляется
Если правую часть нужно вычислить при любых условиях, то вместо показанных выше методов следует обратиться к методам & и |. Первый выполняет логическую операцию «И», а второй — операцию «ИЛИ», но при этом они не прибегают к сокращенному вычислению.
Таблица истинности дизъюнкции, Логическое ИЛИ | ||
---|---|---|
a | b | результат |
false | false | false |
false | true | true |
true | false | true |
true | true | true |
Таблица истинности конъюнкции, Логическое И | ||
---|---|---|
a | b | результат |
false | false | false |
false | true | false |
true | false | false |
true | true | true |
Таблица истинности отрицания,
Логическое НЕ ! | |
---|---|
a | результат |
false | true |
true | false |
Таблица истинности исключающего ИЛИ ^ | ||
---|---|---|
a | b | результат |
false | false | false |
false | true | true |
true | false | true |
true | true | false |
Логические выражения могут быть длинными как и любые другие выражения, и содержать в себе выражения с другими типами.
Пример:
((c - d) >= (d - c)) && a || b ^ (a || b)
Так как длинные логические выражения сложны для человеческого понимания, целесообразно ограничиваться простыми короткими выражениями, и далее их соединять в другие логические выражения с говорящими названиями.
Логические выражения можно преобразовывать в другие, более короткие логические выражения с тем же итоговым значением. Преобразования делаются программистом по законам алгебры логики. Однако следует по возможности придерживаться выразительности логического выражения, показывая изначальную бизнес логику операций. Это поможет вовремя заметить логические ошибки в выражении и в дальнейшем легко дорабатывать такие выражения, не пытаясь разгадать тонкости оптимизированного выражения.Оптимизация (сокращение или упрощение) выражений как правило наносят вред изначально понятным выражениям, и с точки зрения производительности вычислений вносят очень небольшой вклад, поэтому не стоит оптимизировать выражения с целью сделать их вычисления быстрее.
Логическая конструкция if
правитьКонструкция if позволяет получить значение в зависимости от логического выражения. Это конструкция, может быть вложенной, и позволяет построить любую логику.
Конструкция if является выражением.
Логика конструкции:
if (логическое_выражение)
// выражение, если логическое выражение истинно
else
// выражение, если логическое выражение ложно
Пример:
val a = 5
val b = 10
val c = if (a > b)
a - b
else
b - a
Пример вложенной конструкции:
val a = 5
val b = 10
val c = if (a > b)
if ((a - b) > 0)
a * b
else
a + b
else
b - a
Пример реализации операции конъюнкции на конструкции if:
val a = true
val b = false
val c = if (a)
b
else
false
Домашнее задание:
править- В учебном проекте создать файл Boolean.sc (Scala-Worksheet).
- Составите 10 логических выражений, используя операции и тип Boolean и Int. Придумайте им говорящие названия. Предугадайте их значения и потом вычислите их программой.
- На основе созданных выражений создайте 3 составных выражений. Придумайте и к ним говорящие названия.