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