Перейти к содержимому

Сравнения и логика

Сравнение — это тоже число, и с ним можно работать как с числом

простоНужно знать: op: арифметика

Сравнение в mlog не особая конструкция, а такая же операция op, как сложение. Ответ у неё тоже число: 1, если верно, и 0, если нет. Его можно положить в переменную, сложить с другим, передать дальше — он ничем не отличается от обычного числа.

тик 0
Установить0
=
Установить1
=
Операция2
=
Операция3
=
Операция4
=
Операция5
=
@counter0number
медьnullnull
пределnullnull
малоnullnull
многоnullnull
обаnullnull
хотяБыnullnull

Меди 40, предел 100. Первое сравнение отвечает единицей, второе нулём.

Операция В блоке Верно, когда
equal == числа равны (с допуском 0.000001)
notEqual not не равны
lessThan < первое меньше второго
lessThanEq <= меньше или равно
greaterThan > больше
greaterThanEq >= больше или равно

Второй столбец — то, что написано на кнопке в блоке. Совпадает оно не всегда: «не равно» подписано как not, без всякого знака равенства, и с этим связана отдельная путаница — о ней ниже.

Про допуск у equal и про то, чем от него отличается strictEqual, — в уроке «Целые и точность».

land — это «и»: единица, только если оба числа не ноль. В примере оба вышло нулём, потому что второе условие не выполнилось.

А вот отдельной операции «или» в mlog нет. Вместо неё используют or — она побитовая, но на единицах и нулях ведёт себя ровно как «или», потому что 1 или 0 в битах это и есть 1 или 0. В примере хотяБы вышло единицей.

Самая частая ловушка группы, и начинается она с надписей. В списке операций есть not — побитовая инверсия, — но на кнопке она подписана flip. А надпись not достаётся совсем другой операции: так подписано «не равно», то есть notEqual.

В справочнике На кнопке Что это
notEqual not не равно
not flip побитовая инверсия

Дальше — про вторую строку: op not это побитовая инверсия, а не логическое «нет»:

тик 0
Операция0
=
Операция1
=
@counter0number
побитовоеnullnull
логическоеnullnull

not 1 даёт −2, а вовсе не 0. Что при этом происходит с битами — в уроке «Битовые операции», а здесь важно другое: для отрицания эта операция не годится.

Логическое «нет» пишется как сравнение с нулём: op equal ответ условие 0. Было условие единицей — станет нулём, было нулём — станет единицей.

Ветвление в mlog делает не op, а jump — у него условие пишется прямо в блоке перехода. Сравнение через op нужно, когда ответ надо не проверить один раз, а сохранить: сложить несколько условий и посмотреть, сколько из них выполнилось, отдать число в print, положить в память, вернуть другому процессору.

Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.