API Basic Types uk - 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 дозволяє зміну виду значення.