Сравнения и логика
Сравнение — это тоже число, и с ним можно работать как с числом
Сравнение в mlog не особая конструкция, а такая же операция op, как сложение. Ответ у неё
тоже число: 1, если верно, и 0, если нет. Его можно положить в переменную, сложить
с другим, передать дальше — он ничем не отличается от обычного числа.
Меди 40, предел 100. Первое сравнение отвечает единицей, второе нулём.
| Операция | В блоке | Верно, когда |
|---|---|---|
equal |
== |
числа равны (с допуском 0.000001) |
notEqual |
not |
не равны |
lessThan |
< |
первое меньше второго |
lessThanEq |
<= |
меньше или равно |
greaterThan |
> |
больше |
greaterThanEq |
>= |
больше или равно |
Второй столбец — то, что написано на кнопке в блоке. Совпадает оно не всегда: «не равно»
подписано как not, без всякого знака равенства, и с этим связана отдельная путаница —
о ней ниже.
Про допуск у equal и про то, чем от него отличается strictEqual, — в уроке
«Целые и точность».
Два условия сразу
Заголовок раздела «Два условия сразу»land — это «и»: единица, только если оба числа не ноль. В примере оба вышло нулём,
потому что второе условие не выполнилось.
А вот отдельной операции «или» в mlog нет. Вместо неё используют or — она побитовая,
но на единицах и нулях ведёт себя ровно как «или», потому что 1 или 0 в битах это и есть
1 или 0. В примере хотяБы вышло единицей.
not — не отрицание
Заголовок раздела «not — не отрицание»Самая частая ловушка группы, и начинается она с надписей. В списке операций есть not —
побитовая инверсия, — но на кнопке она подписана flip. А надпись not достаётся совсем
другой операции: так подписано «не равно», то есть notEqual.
| В справочнике | На кнопке | Что это |
|---|---|---|
notEqual |
not |
не равно |
not |
flip |
побитовая инверсия |
Дальше — про вторую строку: op not это побитовая инверсия, а не логическое «нет»:
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.