Добавлен Joma
Подскажите, как правильно расставить скобки, например в такой конструкции?
Псевдокод:
if a == 1 or a == 2 and b == 1 or b == 2 and c == 1 or c == 2 then
//
endif
Принятый ответ
Если лень читать про булеву алегбру, то накидаю в двух словах.
Всё выражение разбирается слева на право. Приоритетов у операторов and и or нет. Скобки считаются отдельным выражением и разбираются когда до них дойдёт очередь.
Всё в выражении приводится к булеан, тобишь к true или false. Вот все комбинации, которые несложно запомнить:
true and true = true
true or true = true
true and false = false
true or false = true
false and false = false
false or false = false
false and true = false
false or true = true
Выделим отсюда true or и false and:
true or true = true
true or false = true
false and false = false
false and true = false
Как видите, в независимости от правого операнда, выражение всегда принимает одинаковое значение. Посему практически во всех яп в таких случаях есть оптимизация: правый операнд, будь то скобка или функция, в таких случая не высчитывается. Но близзарды пошли дальше, и в случае false and вообще не считают всё последующее выражение.
Посему избегайте смешивания and и or в одном выражении если не хотите преисполниться в своём познании:
false and true or true -> false
true and false or true -> true
Напоминаю, скобки создают новое выражение.
UPD. Написал статью где это более подробно расписано.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован MpW
А - приказ defend
B - приказ undefend
C - приказ добычи, вррде тут несколько приказов. Бпжать добывать, и отнести на склад
Я все id запихал в переменные, типа код длинный получался.
if id==A then
Бежим рвботать
elseif id==B then
Останавливаемся
elseif id!=C then
Если юнита просто выдернули с работы. То просто еще и кнопку приказом undefend в включенный режим превращаем
endif
Но если я поставлю скобки, так:
включить головупосчитать.Отредактирован nazarpunk
Отредактирован MpW
Просто у меня вместо call BJDebugMsg("YES") может стоят очень много действии и все это копипастить на elseif кажется не красиво)
Отредактирован nazarpunk
Ну тогда все более менее понятно.
Про уровни я вот не знал)))