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 эквивалентны.


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic