@counter: переход как значение
Переход — это не только jump. Номер следующей строки лежит в переменной, и его можно вычислить
@counter — номер строки, которая выполнится следующей. В «Как работает
процессор» его читали: он показывает, где программа сейчас.
Здесь — про то, что в него можно писать.
Запись в счётчик и есть переход
Заголовок раздела «Запись в счётчик и есть переход»Нажмите «шаг» три раза.
Вторая строка кладёт тройку в @counter — и третья строка не выполняется вовсе: пропущено
остаётся пустым, а дошли становится единицей. Ровно то же сделал бы jump со стрелкой
на четвёртую строку.
Разница одна, и она решающая: номер можно посчитать, а стрелку — нет.
Счётчик уже показывает на следующую
Заголовок раздела «Счётчик уже показывает на следующую»Прежде чем считать, надо знать, от чего считать. К моменту, когда строка выполняется, счётчик уже увеличен и показывает на следующую строку.
op add @counter @counter 2 в этом примере пропускает две строки, а не одну: первая
и вторая остаются пустыми, единица достаётся третьей. Прибавка нуля означала бы
«следующая», то есть ничего не менять.
Отсюда правило для расчётов: прибавка n пропускает n строк.
Зачем считать переход
Заголовок раздела «Зачем считать переход»Три случая, ради которых это вообще существует:
- Выбор из многих. Не пять
jumpподряд, а одна строка: номер ветки посчитан заранее и прибавлен к счётчику. Так делают таблицы переходов. - Номер из памяти. В ячейке лежит, какую подпрограмму запускать; программа читает число и прыгает по нему. Получается что-то вроде вызова по имени.
- Возврат. Перед переходом «в подпрограмму» текущий
@counterсохраняют в переменную, а в конце возвращают обратно — это самый близкий к настоящему вызову приём, который в mlog вообще есть.
Дробь усекается. Запишете 2.9 — выполнится строка номер два, а не три.
Номер вне программы возвращает на начало. Отрицательный или больше последней строки —
счётчик обнуляется, и программа идёт с первой строки. Именно так работает end: он кладёт
в счётчик число строк программы, а оно заведомо за краем.
Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.