API Basic OptionExplicit - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Option Explicit
ClassicUO • Basic
Требует объявления переменных до запуска скрипта. Это директива файла языка Basic этого движка, а не команда UO и не вызов функции.
Точный синтаксис
Option Explicit
Option Explicit On
Option Explicit Off
Параметры
On / Off— On включает строгую проверку объявлений; Off отключает её. Если после Explicit ничего нет, подразумевается On. Если директивы в файле нет, сохраняется прежний нестрогий режим. Скобки и кавычки не нужны.
Возвращает
Значения нет. Директива не является выражением и не возвращает TRUE/FALSE, число или ID. RETURN в примерах относится к Main или Enough, а не к Option Explicit.
Поведение
- Напишите директиву один раз, до переменных, констант и процедур. Перед ней допустимы пустые строки и комментарии. Повторная или поздняя директива — ошибка SC013, включая попытку позже переключиться на Off.
- В режиме On чтение или присваивание необъявленной переменной вызывает SC006 с указанием места в исходнике. Проверяются также имена массивов, счётчики FOR и объекты перед вызовом метода. Объявляйте через VAR/DIM/CONST; параметры и именованная переменная CATCH тоже объявляют имена. FOR VAR объявляет счётчик.
- Локальную переменную объявляйте до использования. Локальная переменная одной процедуры не объявляет имя в другой. Глобальные объявления доступны процедурам. Это проверка имён, а не доказательство инициализации значения во всех ветках.
- Парсер читает весь файл; анализатор сопоставляет имена с объявлениями; при ошибке строгой проверки выполнение отклоняется до первой команды. При повторной загрузке применяется режим нового файла независимо от предыдущего скрипта. В режиме Off возможны предупреждения, а чтение ещё не созданного значения может завершиться ошибкой выполнения.
- Сама директива не выполняет игровые действия и не отправляет пакеты. Она не означает полную совместимость с VB.NET и не проверяет существование игровой цели.
Примеры
1. Объявление до присваивания
# On включает проверку. DIM объявляет count типа Integer; присваивание 5 допустимо. Main возвращает 5. Если заменить count на необъявленное coutn, запуск будет отклонён с SC006.
Option Explicit On
SUB Main()
DIM count AS Integer
count = 5
RETURN count
END SUB
Разбор параметров и выполнения:
On включает проверку. DIM объявляет count типа Integer; присваивание 5 допустимо. Main возвращает 5. Если заменить count на необъявленное coutn, запуск будет отклонён с SC006.
2. Параметр и глобальная константа
# Директива без режима означает On. minimum — глобальная константа 3. amount — объявленный параметр в Enough и отдельная локальная переменная в Main. Enough сравнивает 5 >= 3 и возвращает TRUE, численно 1.
Option Explicit
CONST minimum = 3
FUNCTION Enough(amount)
RETURN amount >= minimum
END FUNCTION
SUB Main()
VAR amount = 5
RETURN Enough(amount)
END SUB
Разбор параметров и выполнения:
Директива без режима означает On. minimum — глобальная константа 3. amount — объявленный параметр в Enough и отдельная локальная переменная в Main. Enough сравнивает 5 >= 3 и возвращает TRUE, численно 1.
3. Запуск старого скрипта
# Off допускает создание legacyCounter присваиванием без DIM. Main возвращает 7. В этом примере совместимости может остаться предупреждение; для строгой проверки объявите переменную и включите On.
Option Explicit Off
SUB Main()
legacyCounter = 7
RETURN legacyCounter
END SUB
Разбор параметров и выполнения:
Off допускает создание legacyCounter присваиванием без DIM. Main возвращает 7. В этом примере совместимости может остаться предупреждение; для строгой проверки объявите переменную и включите On.