AstraRegul
Релиз 2024.08.31.00
×

Типы данных

 
Тип
Описание
Размер
Допустимые значения
int1
Знаковое целое
1 байт
[-128; 127]
uint1
Беззнаковое целое
1 байт
[0; 255]
int2
Знаковое целое
2 байта
[-32 768; 32 767]
uint2
Беззнаковое целое
2 байта
[0; 65 535]
int4
Знаковое целое
4 байта
[-2 147 483 648; 2 147 483 647]
uint4
Беззнаковое целое
4 байта
[0; 4 294 967 295]
int8
Знаковое целое
8 байт
[–9 223 372 036 854 775 808; 9 223 372 036 854 775 807]
uint8
Беззнаковое целое
8 байт
[0; 18 446 744 073 709 551 615]
float
Значение с плавающей запятой
4 байта
[±1.5×10-45; ±3.4×1038]
Точность: 6-9 цифр
double
Значение с плавающей запятой
8 байт
[±5.0×10-324; ±1.7×10308]
Точность: 15-17 цифр
bool
Логическое значение
1 байт
true, false
string
Текстовая строка в кодировке UTF16
2 байта × кол-во символов
Макс. 2 ГБ
 
variant
Универсальный тип данных
 
Принимает значения любых вышеперечисленных элементарных типов
 
Чтобы компилятор языка автоматически выбрал необходимый тип данных для переменной, используйте ключевое слово var при инициализации значения.
 
W: var = 5.8; // объявление переменной с автоматическим выбором типа
 
Чтобы компилятор языка автоматически выбрал необходимый тип данных для константы, используйте ключевое слово const при инициализации значения.
 
Q: const = 7; // объявление константы с автоматическим выбором типа
X: 5; //краткий синтаксис объявления константы c автоматическим выбором типа
 

Тип данных variant

 
Variant – универсальный тип данных, который может содержать любые виды информации. Способен гибко принимать значения любых элементарных типов:
целочисленные или вещественные значения;
логические значения;
строковые значения;
неопределенное значение VT_EMPTY.
 
Применяйте тип данных variant в следующих случаях:
если при написании скрипта невозможно заранее точно определить тип данных, хранимый в переменной.
если известно, что содержимое переменной на этапе исполнения скрипта будет меняться в широких диапазонах.
 
Чтобы создать переменную variant неявным способом, присвойте переменной variant значение любого элементарного типа.
 

Пример

 
v0: variant; //создать пустую переменную типа variant (VT_EMPTY)
v2: variant = 100; //создать переменную типа variant с инициализацией значения
s: string = "строка"; //создать переменную типа string
v1: variant = s; //создать переменную типа variant и присвоить ей значение переменной
 
Также переменную типа variant можно создать явным способом, используя набор функций Variant.From<T>.
 

Неопределенное значение (VT_EMPTY)

 
Тип данных variant может принимать неопределенное значение VT_EMPTY в следующих ситуациях:
не было инициализировано начальное значение типа variant:
 
v0: variant; //создать неинициализированную переменную типа variant
 
результат операции будет равен VT_EMPTY, если один из аргументов равен VT_EMPTY:
 
v0: variant; //создать неинициализированную переменную типа variant (VT_EMPTY)
v1: variant = v0 + 1; //v1 = VT_EMPTY, т.к. аргумент v0 = VT_EMPTY
 
результат операции будет равен VT_EMPTY, если операция логически-некорректна. Например, попытка сложения числа со строкой приведет к значению VT_EMPTY:
 
v0: variant = 1;
v1: variant = "my string";
v2: variant = v0 + v1; //недопустимая операция - сложение числа и строки

Набор функций для работы с типом variant

 
Функции для работы с типом находятся в пространстве имен Variant:
Variant.From<T> - набор функций для создания переменной типа variant явным способом;
Variant.MayConvertTo<T> - набор функций для проверки возможности конвертации типа variant в какой-либо элементарный тип данных;
Variant.To<T> - набор функций для конвертации типа variant в один из элементарных типов данных;
Variant.Is<T> - набор функций для проверки типа значения в переменной variant.
 

Операции над данными типа variant

 
В общем случае диапазон возможных операций определяется типом значения, которое содержится в переменной variant. Например, тип variant, содержащий булево значение (true или false) может быть аргументом в логических операциях.
 
На содержимое переменной типа variant не действует ограничение по мощности. Возможно как расширение по мощности, так и сжатие по мощности. Пределы возможных значений ограничены лишь пределами самых мощных типов.
 

Пример

 
//переменная V1 будет содержать 130 (расширение до элементарного типа int2)
X1: int1 = 100;
Y1: int1 = 30;
V1: variant = X1 + Y1;
//Переменная V2 будет содержать 5 (сжатие до элементарного типа int1)
X2: int2 = 32767;
Y2: int2 = 32762;
V2: variant = X2 - Y2;
//переменная R1 = 127, т.к. достигнут предел мощности типа int1
R1: int1 = X1 + Y1;
//переменная R2 = 5, но тип переменной по прежнему int2
R2: int2 = X2 - Y2
 
//Пример некорректной попытки уместить в переменной значение больше максимального
X1: uint8 = 18446744073709551615; //максимально-возможное значение uint8
V1: variant = X1 + 1;