Типы данных
Тип
|
Описание
|
Размер
|
Допустимые значения
|
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;
|