API Basic Constants - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
CONST
ClassicUO • Basic
CONST объявляет имя, привязку которого нельзя изменить обычным присваиванием. Начальным значением может быть литерал или результат выражения. Движок вычисляет инициализатор во время выполнения объявления.
Точный синтаксис
CONST name [AS type] = expression [, name ...]
Параметры
name— Имя константы без кавычек. Используйте отдельное имя в своей области. Объявление вне процедур глобальное; внутри процедуры — локальное для её вызова.type— Необязательный поддерживаемый тип AS с теми же преобразованиями, что у VAR. Например, AS Integer преобразует начальное значение в знаковое 32-битное целое этого движка. Квадратные скобки обозначают необязательную часть; вокруг AS их писать не нужно.expression— Обязательное начальное выражение. Допустимы число, строка в кавычках, TRUE/FALSE, арифметика или результат поддерживаемой функции. Вычисляется один раз для данного выполнения объявления, а не навсегда для файла.
Возвращает
Значения нет. CONST — объявление, а не функция или логический запрос. Чтение имени даёт сохранённый результат инициализатора. RETURN в примерах относится к Main или ApplyLimit.
Поведение
- Обычное присваивание, LET и SET не могут заменить эту привязку: возникает ошибка изменения константы. Её можно обработать через TRY/CATCH. Option Explicit требует объявления, но не превращает любое ошибочное присваивание в ошибку до запуска.
- Глобальная константа инициализируется при новом запуске основной процедуры и наследуется вызываемыми процедурами с признаком константы и типом AS. Локальная инициализируется при выполнении объявления. Функция-инициализатор поэтому может снова выполнять работу при следующем запуске.
- Защищается привязка имени, а не внутреннее содержимое Array/Object. Отдельное локальное объявление может перекрывать глобальное имя; другое объявление создаёт новую привязку. Для ясности не переиспользуйте имена констант.
- Движок вычисляет начальное выражение, применяет AS и отмечает константу в области видимости. Следующее обычное присваивание проверяет этот признак до изменения значения. Примеры со скалярными литералами не выполняют игровых действий.
Примеры
1. Постоянная задержка в расчёте
# delay — локальная константа Integer со значением 350. Умножение на 2 создаёт отдельную переменную doubled=700. Main возвращает 700; ожидание в этом примере не выполняется.
Option Explicit On
SUB Main()
CONST delay AS Integer = 350
VAR doubled = delay * 2
RETURN doubled
END SUB
Разбор параметров и выполнения:
delay — локальная константа Integer со значением 350. Умножение на 2 создаёт отдельную переменную doubled=700. Main возвращает 700; ожидание в этом примере не выполняется.
2. Глобальный предел в функции
# limit — глобальная константа Integer, равная 50. ApplyLimit получает amount=72 и maximum=50, затем возвращает меньшее количество, 50. Функция полностью определена и только читает параметры.
Option Explicit On
CONST limit AS Integer = 50
FUNCTION ApplyLimit(amount, maximum)
IF amount > maximum THEN
RETURN maximum
END IF
RETURN amount
END FUNCTION
SUB Main()
RETURN ApplyLimit(72, limit)
END SUB
Разбор параметров и выполнения:
limit — глобальная константа Integer, равная 50. ApplyLimit получает amount=72 и maximum=50, затем возвращает меньшее количество, 50. Функция полностью определена и только читает параметры.
3. Обработка запрета присваивания
# limit начинается с 3. Присваивание 4 вызывает ошибку и не меняет константу. CATCH сохраняет ошибку в problem и задаёт caught=TRUE. Main возвращает логическую 1; здесь TRUE и 1 эквивалентны.
Option Explicit On
SUB Main()
CONST limit = 3
VAR caught = FALSE
TRY
limit = 4
CATCH problem
caught = TRUE
END TRY
RETURN caught
END SUB
Разбор параметров и выполнения:
limit начинается с 3. Присваивание 4 вызывает ошибку и не меняет константу. CATCH сохраняет ошибку в problem и задаёт caught=TRUE. Main возвращает логическую 1; здесь TRUE и 1 эквивалентны.