Условие и ветвление
Одна проверка — две дороги. Разбираемся, как программа перестаёт быть прямой
У jump четыре поля: куда прыгнуть, какое условие и два значения, которые сравниваются.
Читается строка так: «если запас больше или равен десяти — перейти туда».
Если условие верно, следующей выполняется строка, на которую показывает стрелка. Если нет — обычная следующая, и программа идёт дальше как ни в чём не бывало.
Нажмите «шаг» четыре раза.
В запас лежит семёрка, а условие спрашивает про десять: оно ложно, прыжка нет, и программа
доходит до set мало 1. Ветка «запаса хватает» осталась в стороне — до неё выполнение
не добралось.
Цель задают стрелкой, а не номером
Заголовок раздела «Цель задают стрелкой, а не номером»В тексте программы цель перехода — номер строки, но в блоках номера не пишут: у строки
jump слева есть стрелка, и её перетаскивают на нужную строку. Пока тянут, строки
подсвечиваются.
Так сделано не для красоты. Номера сдвигаются каждый раз, когда строку добавляют или удаляют, а стрелка держится за саму строку: вставили что-то посередине — цель осталась той же, и переход по-прежнему ведёт куда надо.
Зачем ветке end
Заголовок раздела «Зачем ветке end»Третья строка примера — end, и без неё программа, попав в ветку «мало», свалилась бы
в ветку «хватает» и выполнила обе.
Это главная ловушка ветвления: строки не знают, что они чья-то ветка. Выполнение
не останавливается на границе — оно просто идёт дальше по списку. Значит, из ветки нужно
уйти самому: либо end, либо ещё один переход.
Какие бывают условия
Заголовок раздела «Какие бывают условия»Условий восемь. В списке они называются по-английски, а в самой строке видна не подпись, а знак — и это разные надписи, которые стоит знать обе:
| Условие | В блоке | Когда прыгает |
|---|---|---|
equal |
== |
значения равны |
notEqual |
not |
не равны |
lessThan |
< |
меньше |
lessThanEq |
<= |
меньше или равно |
greaterThan |
> |
больше |
greaterThanEq |
>= |
больше или равно |
strictEqual |
=== |
равны и одного вида: отличает пустоту от нуля |
always |
always |
всегда, поля сравнения пропадают |
Сравнивает jump ровно так же, как op: с той же поблажкой в шестом знаке после запятой
и с теми же правилами для null. Подробности — в уроке
«Сравнения и логика».
always: переход без условия
Заголовок раздела «always: переход без условия»Условие always прыгает всегда, и поля сравнения при этом пропадают из строки — сравнивать
нечего.
Нужен он в двух местах: замкнуть цикл с проверкой в начале и уйти из ветки туда, где
продолжается общая часть программы. Второе встречается чаще, чем кажется: end начинает
итерацию заново, а always позволяет продолжить с нужного места.
Неофициальный проект, с Anuke не связан. Спрайты, шрифты и переводы Mindustry © Anuke, используются по GPL-3.0; Fira Code — по OFL-1.1. Код сайта — GPL-3.0.