API Basic Module - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Module / End Module

ClassicUO • Basic

Module объединяет функции, процедуры, VAR/DIM и CONST под одним именем. Снаружи используются имена Tools.Sum или Counter.count; внутри модуля можно писать короткое имя своего участника.

Точный синтаксис

Module moduleName
    members
End Module
moduleName.member(arguments)
moduleName.field

Параметры

  • moduleName — moduleName: простой идентификатор, например Tools. Регистр не учитывается. UO зарезервирован. Модули с одинаковым именем и вложенные Module не допускаются.
  • members — members: SUB/FUNCTION, скалярные VAR/DIM, CONST, Include и допустимая директива Option Explicit. Участники могут содержать обычные массивы или объекты как значения. Объявление массива DIM[...] непосредственно в модуле не поддерживается; его можно создать функцией и сохранить в VAR.
  • member / arguments — member / arguments: имя участника и аргументы его функции. Запись Tools.Sum(2, 3) передаёт 2 в left и 3 в right. Доступ к полю Counter.count не требует скобок.

Возвращает

Сам Module ничего не возвращает и не вызывается как Module(...). Значение Tools.Sum(...) задаёт RETURN этой функции. Поле возвращает сохранённое значение. Результат сравнения равен Integer 1 или 0: в условиях и сравнении с TRUE/FALSE эти значения соответствуют истине/лжи. Произвольное число, ID или количество не следует описывать как булев результат.

Поведение

  • Размещайте Module на уровне файла и завершайте End Module. Include может загружать целый модуль или его участников; вложенный файл сохраняет свои файл и строку в ошибках. Option Explicit остаётся директивой физического файла.
  • Подготовка собирает полные имена, связывает короткие ссылки с текущим модулем и проверяет доступ до запуска. Явно объявленный локальный параметр, VAR, CONST или DIM имеет приоритет над полем с таким же именем. Иначе сначала ищется поле текущего модуля, затем обычная глобальная переменная.
  • Поля модуля инициализируются при начале отдельного запуска в порядке объявлений. Вложенные вызовы этого запуска видят общие изменения полей. Новый запуск создаёт новые значения; разные одновременно запущенные скрипты не делят это состояние. Это не сохранение настроек на диск.
  • Функции/процедуры без модификатора в модуле публичные; поля и константы по умолчанию приватные. Private разрешён только внутри Module. См. раздел Public / Private.
  • IDE показывает полные имена процедур. Публичную процедуру без обязательных аргументов можно запускать из списка; приватная остаётся внутренним помощником. Подсказки, переход к объявлению и просмотр переменных учитывают текущий модуль.

Примеры

1. Одинаковые имена в разных модулях

# Tools.Sum складывает left=2 и right=3, возвращая 5. Other.Sum умножает те же аргументы и возвращает 6. Полные имена различают функции; Main возвращает Integer 11.
Option Explicit On
Module Tools
    Public Function Sum(ByVal left, ByVal right)
        Return left + right
    End Function
End Module
Module Other
    Public Function Sum(ByVal left, ByVal right)
        Return left * right
    End Function
End Module
Sub Main()
    Return Tools.Sum(2, 3) + Other.Sum(2, 3)
End Sub

Разбор параметров и выполнения:

Tools.Sum складывает left=2 и right=3, возвращая 5. Other.Sum умножает те же аргументы и возвращает 6. Полные имена различают функции; Main возвращает Integer 11.

2. Общее поле одного запуска

# count начинается с 0. Каждый Increment изменяет одно и то же поле на 1; после двух вызовов before=2. Присваивание Counter.count=5 видно функции Read. Main возвращает 2*10+5, то есть Integer 25. Новый запуск снова начинает с 0.
Option Explicit On
Module Counter
    Public Var count As Integer = 0
    Public Sub Increment()
        count += 1
    End Sub
    Public Function Read()
        Return count
    End Function
End Module
Sub Main()
    Counter.Increment()
    Counter.Increment()
    Var before = Counter.Read()
    Counter.count = 5
    Return before * 10 + Counter.Read()
End Sub

Разбор параметров и выполнения:

count начинается с 0. Каждый Increment изменяет одно и то же поле на 1; после двух вызовов before=2. Присваивание Counter.count=5 видно функции Read. Main возвращает 2*10+5, то есть Integer 25. Новый запуск снова начинает с 0.

3. Булев результат функции

# maximum=4 доступен внутри Limits. Allowed(3) возвращает Integer 1, Allowed(7) — Integer 0. Сравнения accepted=TRUE и rejected=FALSE проверяют именно эти результаты; при успехе Main возвращает Integer 10.
Option Explicit On
Module Limits
    Private Const maximum = 4
    Public Function Allowed(ByVal amount)
        Return amount <= maximum
    End Function
End Module
Sub Main()
    Var accepted = Limits.Allowed(3)
    Var rejected = Limits.Allowed(7)
    If accepted = TRUE AndAlso rejected = FALSE Then
        Return 10
    End If
    Return 0
End Sub

Разбор параметров и выполнения:

maximum=4 доступен внутри Limits. Allowed(3) возвращает Integer 1, Allowed(7) — Integer 0. Сравнения accepted=TRUE и rejected=FALSE проверяют именно эти результаты; при успехе Main возвращает Integer 10.


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

Basic