Булев оператор

Булев оператор — оператор, производящий булево значение из одного или двух булевых значений. То же: 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.