Грабли
Здесь будем собирать самые распространенные ошибки начинающих авторов.
С тем, чтобы для распространенных ошибок не объяснять по сто раз одно и то же, а направить автора на уже существующее, подробное описание ошибки.
Это справочная тема, поэтому писать сюда нельзя, можно только читать. Для обсуждения “граблей” открыта специальная тема по соседству - Грабли: обсуждение, в ней можно задать любые уточняющие вопросы по граблям.
Часто бывает, что не разобравшись в понятиях “однострочный оператор” и “многострочный оператор”, автор пишет вот так:
IF <условие> : оператор1 & оператор2
оператор3
оператор4
END
В этой конструкции, при выполнении условия будут выполняться операторы 1, 2, 3 и 4, а при невыполнении условия - 3 и 4, т.к. в первой строке - однострочный IF. Лишний END игнорируется. Для того, чтобы он был многострочным, нужно не писать ничего в той же строке после двоеточия - соответственно, записывать операторы в последующих строках.
IF <условие> :
оператор1
оператор2
оператор3
оператор4
END
Синим я раскрасил те операторы, которые выполняются при выполнении условия.
Для оператора ACT - все так же, как и для IF.
!Верная запись однострочного ACT
ACT ‘Название действия’: оператор1 & оператор2
!Верная запись многострочного ACT
ACT ‘Название действия’:
оператор1
оператор2
END
!Неверная запись ACT
ACT ‘Название действия’: оператор1 & оператор2
оператор1
оператор2
END
Привычка к использованию оператора JUMP часто приводит автора к следующей проблеме:
он хочет сделать переход из действия на метку в коде локации, но JUMP не срабатывает.
Это связано с тем, что область видимости меток органичена блоком кода, в котором они находятся, а выполняемое действие - это отдельный блок кода.
Обойти это ограничение довольно просто.
!Начало локации
IF $args[0]<>'': JUMP $args[0]
...
...
:моя_метка
...
...
!Действие, из которого будет переход на нужную нам метку
ACT 'Переход':
GOTO $CURLOC,'моя_метка'
END