Вложенные условия и ранний выход
У jump одно условие и одна цель. Всё остальное — «и», «или», else, выход из цикла — собирается из нескольких переходов
В jump помещается ровно одна проверка: два значения и одно сравнение. Ни «и», ни «или»,
ни «иначе если» в нём нет — и не появится. Зато переходов можно поставить несколько подряд,
и этого хватает на всё.
«И» — это два перехода подряд
Заголовок раздела ««И» — это два перехода подряд»Условие «включено и запаса хватает» пишется двумя строками, и обе ведут в одно и то же место — мимо работы:
jump 8 equal включено 0jump 8 lessThan запас 10Обратите внимание: проверки перевёрнуты. jump уводит выполнение, значит уводить его
надо тогда, когда условие работы не выполнено. Это главная причина, по которой чужие
программы на mlog читаются тяжело, и привыкнуть к ней стоит сразу.
«Или» — два перехода в одно место
Заголовок раздела ««Или» — два перехода в одно место»Перевёрнутых проверок здесь не нужно: каждый переход сам по себе достаточен.
jump 12 greaterThan враговРядом 0jump 12 lessThan здоровье 200Программа уйдёт на строку 12, если случилось хотя бы одно из двух.
Ранний выход вместо вложенности
Заголовок раздела «Ранний выход вместо вложенности»Вот та же пара проверок целиком. Всё, что должно сорвать работу, проверяется в начале, и каждая проверка уводит в конец:
jump 8 equal включено 0jump 8 lessThan запас 10set выдать 5op sub запас запас выдатьset сделано 1stopset сделано 0Такой приём называют ранним выходом, а сами проверки — охраной. Работа остаётся одним ровным куском, без ступенек.
Соблазн написать наоборот — «если включено, то если запаса хватает, то…» — приводит к лесенке из переходов, где каждая ветка ведёт на свою строку. В тексте это ещё читается, а в блоках превращается в клубок стрелок.
Выйти из цикла досрочно
Заголовок раздела «Выйти из цикла досрочно»Цикл ищет в ячейке первое непустое место — и прекращает перебор, как только нашёл:
read значение cell1 адресjump 7 notEqual значение 0op add адрес адрес 1jump 1 lessThan адрес 64set найдено -1stopset найдено адресПереход из середины цикла на строку после него и есть досрочный выход. Программа
остановится на адресе 3, где лежит 42, а не пройдёт все шестьдесят четыре места впустую.
Строка set найдено -1 — то, что случится, если цикл дошёл до конца и ничего не нашёл.
Ответ «не нашлось» стоит готовить всегда: без него переменная останется с прошлой итерации,
и программа примет старую находку за новую.
Пропустить шаг
Заголовок раздела «Пропустить шаг»Обратный случай: шаг цикла не нужно делать, но и выходить рано. Переход ведёт не наружу, а на увеличение счётчика:
op mod остаток счёт 2jump 4 notEqual остаток 0op add итог итог счётop add счёт счёт 1jump 1 lessThan счёт 10В сумму попадают только чётные числа — итог выходит 20. Нечётные цикл проматывает,
не трогая сумму.
Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.