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

@counter: переход как значение

Переход — это не только jump. Номер следующей строки лежит в переменной, и его можно вычислить

@counter — номер строки, которая выполнится следующей. В «Как работает процессор» его читали: он показывает, где программа сейчас. Здесь — про то, что в него можно писать.

Нажмите «шаг» три раза.

тик 0
Установить0
=
Установить1
=
Установить2
=
Установить3
=
Конец4
@counter0number
кудаnullnull
пропущеноnullnull
дошлиnullnull

Вторая строка кладёт тройку в @counter — и третья строка не выполняется вовсе: пропущено остаётся пустым, а дошли становится единицей. Ровно то же сделал бы jump со стрелкой на четвёртую строку.

Разница одна, и она решающая: номер можно посчитать, а стрелку — нет.

Прежде чем считать, надо знать, от чего считать. К моменту, когда строка выполняется, счётчик уже увеличен и показывает на следующую строку.

тик 0
Установить0
=
Операция1
=
Установить2
=
Установить3
=
Установить4
=
@counter0number
шагnullnull
перваяnullnull
втораяnullnull
третьяnullnull

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.