API Basic Program - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
SUB Main()
ClassicUO • Basic
Файл Basic содержит определения процедур/функций и необязательные глобальные объявления. Исполняемые действия помещаются внутрь процедуры. Здесь точка входа — Main(); примеры являются полными файлами, а не фрагментами для вставки вне процедуры.
Точный синтаксис
Option Explicit On
SUB Main()
statement
END SUB
# comment
; comment
REM comment
// comment
' comment
Параметры
Main / entry— Процедура, выбранная для запуска. Main — принятое имя, а не автоматически выполняемая команда. SUB Main() объявляет процедуру без аргументов. Вспомогательная функция работает только при вызове.statement— Одна исполняемая инструкция на строку внутри SUB…END SUB или FUNCTION…END FUNCTION. Глобальные VAR/CONST и Option Explicit находятся вне этих блоков. Option Explicit размещается перед объявлениями.comment— # и ; начинают комментарий вне строковых кавычек, в том числе после кода. REM, // и апостроф начинают отдельную строку комментария после возможного отступа. В строковом значении эти символы могут сохраняться как обычный текст.
Возвращает
Файл или объявление SUB при загрузке ничего не возвращает. RETURN expression возвращает значение из вызванной процедуры и немедленно завершает этот вызов. Достижение конца блока либо RETURN без выражения даёт Unit — отсутствие значения.
Поведение
- Сохраняйте исходники в UTF-8, чтобы не терялись локализованные комментарии и строки. Принимаются окончания строк CRLF и LF. Отступы и пустые строки улучшают читаемость, но не заменяют END SUB или END FUNCTION.
- Ключевые слова, имена процедур и переменных не зависят от регистра букв. itemCount, ITEMCOUNT и ItemCount обращаются к одной привязке. Регистр внутри текста сохраняется; строковые ключи вроде UO.SetGlobal("Key", …) — данные, а не идентификаторы.
- Простое имя начинайте с латинской буквы ASCII или подчёркивания; далее допустимы буквы, цифры и подчёркивания. Не используйте зарезервированные слова и имена API для собственных объявлений. UO.Print — составное имя вызова. Двоеточие после имени задаёт метку, а не общий разделитель нескольких инструкций.
- Движок нормализует поддерживаемый Basic, разбирает весь файл, собирает объявления и проверяет имена. Поэтому вспомогательная функция может быть ниже Main. Загрузка не запускает все определения: старт выбранной процедуры инициализирует её выполнение и следует её вызовам.
- Примеры только вычисляют значения. После проверки шаблона нужные UO-вызовы помещаются внутрь его блока. Это правила нашего движка; они не означают поддержку всех возможностей других реализаций Basic.
Примеры
1. Комментарии и текст строки
# Main объявляет note с текстом "ore #1; keep". Символы # и ; внутри строки сохраняются. Остальные комментарии #, REM, // и с апострофом ничего не выполняют. RETURN возвращает исходный текст.
Option Explicit On
# Complete file
SUB Main()
REM Full-line comment
VAR note = "ore #1; keep" # Trailing comment
// Another full-line comment
' Another full-line comment
RETURN note
END SUB
Разбор параметров и выполнения:
Main объявляет note с текстом "ore #1; keep". Символы # и ; внутри строки сохраняются. Остальные комментарии #, REM, // и с апострофом ничего не выполняют. RETURN возвращает исходный текст.
2. Полностью определённая функция
# Main вызывает DoubleCount с amount=7. Функция определена ниже Main, умножает параметр Integer на 2 и возвращает 14. Main передаёт этот результат дальше. Не нужны отсутствующий Include-файл или необъявленная функция.
Option Explicit On
SUB Main()
RETURN DoubleCount(7)
END SUB
FUNCTION DoubleCount(ByVal amount AS Integer)
VAR result = amount * 2
RETURN result
END FUNCTION
Разбор параметров и выполнения:
Main вызывает DoubleCount с amount=7. Функция определена ниже Main, умножает параметр Integer на 2 и возвращает 14. Main передаёт этот результат дальше. Не нужны отсутствующий Include-файл или необъявленная функция.
3. Регистр имени
# Скрипт объявляет itemCount=3, затем через ITEMCOUNT и itemcount прибавляет 2 к той же переменной. Ключевые слова со смешанным регистром принимаются. Main возвращает 5; разное написание не создаёт дополнительных переменных.
Option Explicit On
sUb Main()
Var itemCount = 3
ITEMCOUNT = itemcount + 2
ReTuRn ItemCount
EnD sUb
Разбор параметров и выполнения:
Скрипт объявляет itemCount=3, затем через ITEMCOUNT и itemcount прибавляет 2 к той же переменной. Ключевые слова со смешанным регистром принимаются. Main возвращает 5; разное написание не создаёт дополнительных переменных.