Грабли

Грабли

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

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

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

Nex
useravatar
Offline
4277 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Грабли

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

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

Nex
useravatar
Offline
4277 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Re: Грабли

Привычка к использованию оператора JUMP часто приводит автора к следующей проблеме:
он хочет сделать переход из действия на метку в коде локации, но JUMP не срабатывает.

Это связано с тем, что область видимости меток органичена блоком кода, в котором они находятся, а выполняемое действие - это отдельный блок кода.

Обойти это ограничение довольно просто.

Код:

!Начало локации

IF $args[0]<>'': JUMP $args[0]
...
...
:моя_метка
...
...
!Действие, из которого будет переход на нужную нам метку
ACT 'Переход':
    GOTO $CURLOC,'моя_метка'
END

Nex
useravatar
Offline
4277 Сообщений
Информация о пользователе в сообщениях
Администратор отключил публичную отправку сообщений

Информация

Статистика форума:
 
Всего тем:
975
Всего опросов:
14
Всего сообщений:
16790603
Сообщений на этой неделе:
6
Пользователи форума:
 
Всего пользователей:
2381
Последним зарегистрировался:
нртргмпав