RU 📌 Pinned 🔒 Locked

Грабли

Nex Moderator 31.08.2010 17:56 2 comments 14959 views

Здесь будем собирать самые распространенные ошибки начинающих авторов.

С тем, чтобы для распространенных ошибок не объяснять по сто раз одно и то же, а направить автора на уже существующее, подробное описание ошибки.

Это справочная тема, поэтому писать сюда нельзя, можно только читать. Для обсуждения “граблей” открыта специальная тема по соседству - Грабли: обсуждение, в ней можно задать любые уточняющие вопросы по граблям.

Часто бывает, что не разобравшись в понятиях “однострочный оператор” и “многострочный оператор”, автор пишет вот так:

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

Log in or Register to post comments.