УПРАВЛЕНИЕ ПРОГРАММОЙ_
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 ограничен лишь фантазией программиста.