API Basic Constants uk - 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 еквівалентні.