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

AS

ClassicUO • Basic

AS задаёт правило преобразования скалярной переменной. В движке хранятся Integer, Decimal, String, Array, Object и Unit — отсутствие значения. Boolean хранится как Integer 1/0. У этого диалекта Basic собственные правила: имя типа не означает соответствующую разрядность VB.NET.

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

VAR name AS type [= value]
DIM name AS type [= value]

Параметры

  • name — Имя объявляемой переменной. Чтение даёт её текущее значение; при каждом следующем присваивании снова применяется преобразование AS.
  • type — Integer, Long, Short, Byte: знаковое 32-битное целое от -2147483648 до 2147483647; Short и Byte не вводят более узкие пределы. Double, Single, Decimal: двоичное 64-битное число с плавающей точкой, внутреннее имя Decimal; это не точная десятичная арифметика. String: текст. Boolean, Bool: Integer 1/0. Variant, Object: сохраняют вид переданного значения, не требуя экземпляра объекта. Регистр имени не важен.
  • value — Необязательное начальное значение: число, текст, переменная или результат функции. AS относится к объявлению; для явного преобразования в выражении используются CInt(value), CDbl(value), CStr(value), CBool(value).

Возвращает

Сам AS ничего не возвращает. Чтение переменной возвращает сохранённый вид и значение. Логический числовой результат использует TRUE=1 и FALSE=0. Количество 2 не равно нулю, но 2=TRUE ложно: наличие предметов проверяйте через count<>0 или CBool(count).

Поведение

  • Без инициализатора типизированный VAR даёт 0 для целых/Boolean, дробный 0 для Double/Single/Decimal и пустой текст для String. VAR без типа и VAR AS Variant/Object дают Unit. Скалярный DIM подставляет инициализатор: пустой текст для String, иначе 0. Unit при присваивании через AS остаётся Unit.
  • AS Integer отбрасывает дробную часть допустимого по диапазону числа к нулю. CInt/CLng округляют, а половины — от нуля: 2.6 превращается в 3, тогда как AS Integer сохраняет 2. Целочисленный текст должен целиком содержать десятичное целое или 0x-число; "2.6" не подходит. Проверяйте диапазон до преобразования.
  • AS Boolean сравнивает исходное значение с числовым нулём: ненулевое число даёт 1, ноль — 0. Слова не распознаются: даже текст "false" превращается в 1. CBool сначала выполняет числовое преобразование. Используйте числа/логические значения либо явно сравнивайте текст с нужным словом.
  • AS String использует текстовое представление движка. AS Double/Single/Decimal разбирает числовой текст с точкой. Числовое AS превращает Array в 0, но для Object и неверного числового текста выдаёт ошибку, обрабатываемую TRY/CATCH. CInt/CLng/CDbl/CSng/CBool используют более мягкое чтение: непонятная строка, Array, Object или Unit сначала превращаются в 0. Проверяйте IsNumeric(value), прежде чем полагаться на преобразование текста.
  • Движок вычисляет инициализатор, выбирает преобразование AS и сохраняет результат с именем типа. Следующее присваивание повторяет преобразование. Дробные значения приблизительные; не рассчитывайте на точную денежную десятичную арифметику. Области видимости описаны в VAR / DIM, защита привязки — в CONST.
  • После As также поддерживается имя объявленной Structure. VAR и DIM с этим типом без инициализатора создают поля по умолчанию. Принимается именно этот объявленный тип структуры; разные структурные типы друг в друга не преобразуются. Копирование вложенных значений и ссылочные поля описаны в Structure / New.

Примеры

1. Присваивание и округление

# source=2.6 — дробное число. whole AS Integer сохраняет 2; CInt(source) возвращает 3 в rounded. Main возвращает 2*10+3=23, чтобы можно было проверить сразу оба преобразования.
Option Explicit On
SUB Main()
    VAR source = 2.6
    VAR whole AS Integer = source
    VAR rounded = CInt(source)
    RETURN whole * 10 + rounded
END SUB

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

source=2.6 — дробное число. whole AS Integer сохраняет 2; CInt(source) возвращает 3 в rounded. Main возвращает 2*10+3=23, чтобы можно было проверить сразу оба преобразования.

2. Количество и логический результат

# count=2 — количество предметов. hasItems AS Boolean становится 1. count=TRUE ложно, потому что TRUE равен именно 1; count<>0 истинно. Main возвращает hasItems=1: предметы есть, но это не означает количество один.
Option Explicit On
SUB Main()
    VAR count = 2
    VAR hasItems AS Boolean = count
    IF count = TRUE THEN
        RETURN -1
    END IF
    IF count <> 0 THEN
        RETURN hasItems
    END IF
    RETURN FALSE
END SUB

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

count=2 — количество предметов. hasItems AS Boolean становится 1. count=TRUE ложно, потому что TRUE равен именно 1; count<>0 истинно. Main возвращает hasItems=1: предметы есть, но это не означает количество один.

3. Variant сохраняет вид значения

# value AS Variant сначала хранит Integer 7, затем String "ore". text AS String начинается с пустой строки. CStr(12) даёт текст "12"; соединение двух строк даёт "ore12", которое возвращает Main. Variant допускает смену вида значения.
Option Explicit On
SUB Main()
    VAR value AS Variant = 7
    value = "ore"
    VAR text AS String
    text = value + CStr(12)
    RETURN text
END SUB

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

value AS Variant сначала хранит Integer 7, затем String "ore". text AS String начинается с пустой строки. CStr(12) даёт текст "12"; соединение двух строк даёт "ore12", которое возвращает Main. Variant допускает смену вида значения.


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

Basic