Ленивое вычисление
Рассмотрим поближе совокупную таблицу операторов and и or:
a | b | a | a |
---|---|---|---|
true | true | true | |
true | false | false | true |
false | true | false | true |
false | false | false |
Как видите, вне зависимости от второго аргумента результат не меняется. Посему интерпретатор в таких случаях не считает второе выражение. В этом легко убедиться передав вторым выражением функцию:
Минутка рукожопости
В любом другом языке программирования выполнив эквивалент false and true or true вы получите true
или его числовое представление в виде 1. Но выполнив такой код в игре вы сильно удивитесь и можете заподозрить автора сей статьи во всяком.
Разгадка сего действия проста - если первым аргументом функции and
был передан false
то игра перестаёт считать выражение и экстренно возвращает false
. //При этом неважно, будет получен false
как значение литерала, из переменной или в результате выполнения функции.
--
Исправить это можно с помошью скобок:
Они расцениваются как отдельное выражение и основное выражение не завершится и будет посчитано правильно: