Ложные условия
Вопрос:
Задаю условие:
if_not (x1 y1 color1) and (x2 y2 color2) // условие такого вида не хочет работать правильно bla bla bla end_if
Однако, если реализовать следующим образом:
if_not (x1 y1 color1) if_not (x2 y2 color2) bla bla bla end_if end_if // то все прекрасно выполняется
Ответ:
Обобщим ситуацию: нужно, чтобы скрипт проверил цвет в нескольких точках, и если ВО ВСЕХ этих точках цвет НЕ СОВПАДАЕТ с заданным, то выполнить какие-то действия.
Действительно, с условием if_not у людей часто возникают некоторые недоразумения.
Решение простое, хоть и не совсем понятное сразу.
Нужно делать так:
if_not (x1 y1 color1) OR (x2 y2 color2) что-то делаем end_if
Почему OR ? Всё довольно просто.
Условие if_not срабатывает только в случае
if_not ЛОЖЬ
(в отличие от оператора if ИСТИНА)
Мы имеем следующие логические выражения:
ЛОЖЬ or ЛОЖЬ = ЛОЖЬ
ЛОЖЬ or ИСТИНА = ИСТИНА
ИСТИНА or ЛОЖЬ = ИСТИНА
ИСТИНА or ИСТИНА = ИСТИНА
ЛОЖЬ and ЛОЖЬ = ЛОЖЬ
ЛОЖЬ and ИСТИНА = ЛОЖЬ
ИСТИНА and ЛОЖЬ = ЛОЖЬ
ИСТИНА and ИСТИНА = ИСТИНА
Для нашего же случая условие должно срабатывать (должно быть равно ЛОЖЬ), только если все условия проверок ложны (т.е. во всех точках цвет не совпадает с заданным). А для этого подходит именно логический оператор OR, как и видно выше.
Если бы мы использовали оператор AND, то он бы срабатывал, даже если бы в одной из точек цвет совпал с заданным (что нам не подходит).