УПРАВЛЕНИЕ ПРОГРАММОЙ_
IF...THEN...ELSE, GO TO ONf GO SUB ONr ON
В Spectrum-Бейсике ветвление программы реализуется с помощью конструкции IF...THEN и операторов GO ТО и GO SUB. В Beta Basic, благодаря дополнению оператора IF...THEN ключевым словом ELSE, появилась возможность в большинстве случаев вообще отказаться от операторов перехода. Расширенная версия условного оператора записывается так:
IF <условие> THEN [:] <6лок операторов 1> [:]
[ELSE [:] <6лок операторов 2>]
В зависимости от того, истинно или ложно <условие>, выполнится, соответственно, либо <блок операторов 1>, либо альтернативный <блок операторов 2>.
Вся конструкция должна быть записана в одну строку.
Каждый из блоков операторов внутри себя может содержать еще конструкции IF...THEN...ELSE, причем глубина таких вложений неог-раничена. В этом случае, если на каком-либо уровне вложения <блок операторов 1> не предполагает наличия альтернативного <бло-ка операторов 2>, то на этот уровень нужно принудительно ввести «пустой» ELSE. Это необходимо сделать во избежание неоднозначности в определении, к какому именно из IF...THEN относится данный ELSE:
100 IF L>15 THEN:
IF J<L THEN LET K=L*J: ELSE:
ELSE LET K=0
Кроме конструкции IF...THEN...ELSE, Beta Basic располагает и другими операторами, организующими разного рода ветвления программ.
GO ТО ON <числовая леременная>;<список адресов перехода>
Параметр <список адресов перехода > представляет собой перечень номеров строк, записанных через запятую, например:
10 GO ТО ON J;70,150,345
Значение первого параметра задает порядковый номер адреса, по которому нужно передать управление. Таким образом, приведенная программная строка равносильна фрагменту:
10 IF J=1 THEN GO TO 70 20 IF J=2 THEN GO TO 150 30 IF J=3 THEN GO TO 345
<Список адресов перехода> может иметь произвольную длину. Если значение <числовой переменной> превысит количество элементов в списке, оператор будет проигнорирован, управление передастся следующей за ним строке. При отрицательном значении <числовой переменной> знак «минус» отбрасывается.
GO SUB ON <числовая переменная>;<список адресов перехода>
Этот оператор отличается от предыдущего тем же, чем обычный GO SUB отличается от GO ТО.
Обе инструкции дают возможность компактно организовывать ветвление программы и просто незаменимы при создании разного рода меню.
Локальные переходы в пределах одной строки позволяет осуществлять оператор варианта
ON <числовая переменная):< оператор) :[<оператор>: ...]
Из всего списка операторов, расположенных за ON, будет выполнен только один — тот, чей порядковый номер в строке задан значением параметра <числовая переменная). После этого управление будет передано следующей за конструкцией ON строке программы (разумеется, если не произошло принудительного перехода или вызова подпрограммы93).
Основное достоинство оператора ON — его универсальность. К примеру, с его помощью можно организовать многовариантное переопределение переменных (используя способность оператора LET обслуживать список переменных произвольной длины):
100 INPUT J
110 ON J: LET A=484, 8=50, C=88: LET A=242, 8=12, C=82: LET A=212, 8=85, C=06
120 PRINT А, В, С
Интересным свойством будет обладать приведенная в примере конструкция, если ее поместить в цикл FOR...NEXT, в котором переменная цикла и параметр оператора ON совпадают. Одним словом, спектр применения оператора ON ограничен лишь фантазией программиста.