Булев оператор — оператор, производящий булево значение из одного или двух булевых значений. То же: boolean operator.
Унарный булев оператор только один — not
. true он меняет на false и наоборот.
1> not true.
false
2> not false.
true
Бинарных булевых операторов пять:
and. Логическое И. Оба булевых значения должны быть true, чтобы в итоге тоже оказалось true.
1> true and true.
true
2> true and false.
false
3> false and true.
false
4> false and false.
false
or. Логическое ИЛИ. Оба булевых значения должны быть false, чтобы в итоге тоже оказалось false.
1> true or true.
true
2> true or false.
true
3> false or true.
true
4> false or false.
false
xor. Логическое исключающее ИЛИ. Если булевы значения разные, в итоге будет true, иначе — false.
1> true xor true.
false
2> true xor false.
true
3> false xor true.
true
4> false xor false.
false
andalso. В целом работает как логическое И. Выражение true andalso true
вернёт true и так далее. Но есть нюанс, влияющий как на производительность, так и на логику программы. Если в случае Выражение1 and Выражение2
оба выражения в любом случае будут высчитаны, то в случае Выражение1 andalso Выражение2
, точно будет высчитано только первое выражение. Если Выражение1 вернёт false, то Выражение 2 можно уже не считать, потому что в любом случае итоговый результат будет false. В некоторых случаях поэтому and и andalso могут работать по-разному:
1> X = 0.
0
2> (X /= 0) andalso (1/X > 1).
false
3> (X /= 0) and (1/X > 1).
** exception error: an error occurred when evaluating an arithmetic expression
in operator '/'/2
called as 1 / 0
Чтобы вычислить выражение 1/X > 1
, придётся сначала вычислить 1/X
, а у икса значение 0, поэтому и возникает ошибка.
orelse. В целом работает как логическое ИЛИ. Но тут тоже есть нюанс. Если Выражение1 вернёт true, то в любом случае в итоге будет true, поэтому Выражение2 можно не считать. В некоторых случаях поэтому or и orelse работаю по-разному.
1> X = 0.
0
2> (X == 0) orelse (1/X > 1).
true
3> (X == 0) or (1/X > 1).
** exception error: an error occurred when evaluating an arithmetic expression
in operator '/'/2
called as 1 / 0
© Алексей Карманов, 2024.