В данной статье мы рассмотрим типы данных vbs. Большинство языков программирования требует явного указания типа для каждой переменной, мы как бы говорим программе: вот в этой переменной хранится число 200, ей нужно присвоить тип byte и выделить 1 байт памяти, а тут у нас число 324,345, тут нужен тип real и 4 байта памяти. Типы данных vbs избавлены от этой математики, так как тут, язык автоматически присваивает всем переменным тип Variant.
Давайте рассмотрим простенький скрипт:
'********************************* 'type_1.vbs 'Типы данных vbs '********************************* dim var_1, var_2, var_3 var_1 = 125 var_2 = "125" var_3 = var_1 + var_2 'Получим 250 MsgBox (var_3) var_1 = "первая " var_2 = "строка" var_3 = var_1 + var_2 'Получим первая строка MsgBox (var_3) var_1 = 200 var_2 = "строка" var_3 = var_1 + var_2 'получим ошибку MsgBox (var_3) |
У языка VBScript есть тенденция автоматически преобразовывать содержимое переменной к нужному типу (при возможности). Сначала var_1 содержит число 125, а var_2 – строку «125», переменная var_3 будет содержать сумму переменных var_1 и var_2. Тут интерпретатор языка автоматически приводит строку к числу. После, мы присвоили обоим переменным строковые значения, и вместо сложения произошла конкатенация (объединение строк). Уже в конце, var_1 снова содержит число 200, а var_2 – строковое значение, но тут суммирования не происходит, а возникает ошибка.
Хорошо, vbscript поддерживает лишь один тип Variant, но в нём содержаться встроенные vbs типы данных, переменная приводится к ним автоматически, без нашего участия. Давайте сначала познакомимся с ними, а потом напишем сценарий-пример.
Основные типы данных vbs, которые входят в состав типа Variant:
- Empty – присваивается, если мы объявили переменную, но еще ничего ей не присвоил;
- Null – присваивается, если мы присвоили значение Null;
- Byte — целое число от 0 до 255;
- Integer — целое число от -32 768 до 32 767;
- Long — большое целое число от -2 147 483 648 до 2 147 483 647;
- Currency — число с фиксированной точкой в диапазоне от -922 337 203 685 477.5808 до 922 337 203 685 477.5807;
- Single – число с плавающей точкой одинарной точности. Для отрицательных значений допустимый диапазон от -3.402823E38 до -1.401298E-45. Для положительных – от 1.401298E-45 до 3.402823E38;
- Double — число с плавающей точкой двойной точности. Для отрицательных значений допустимый диапазон от -79769313486232E308 до -4.94065645841247E-324. Для положительных — от 4.94065645841247E-324 до 1.79769313486232E308;
- String – последовательность символов. Переменной длины (примерно до 2 млрд. символов) и фиксированной длины (примерно до 65 400 символов));
- Date — временный интервал от 01.01.100 до 31.12.9999;
- Boolean — логический тип данных vbs, хранит значения True и False;
- Object — является ссылкой на объект;
Хорошо, вы скажете, всё это прекрасно, нокак определить vbs типы дынных, которые содержит переменная? Всё просто, для этого можно использовать функцию TypeName, в качестве параметра ей надо передать имя переменной. Но тут есть один подводный камень:
'********************************* 'type_2.vbs 'Типы данных vbs '********************************* dim var_str var_str="строка" MsgBox (TypeName(var_str)) 'получим string MsgBox (VarType(var_str)) 'получим 8 |
В данном примере, переменная var_str содержит строку, ей автоматически присваивается vbs тип данных – String, используя функцию TypeName мы получим string, то есть – строка. Если мы вместо функции TypeName будем использовать функцию VarType, то получим не названия типа данных vbs, а число, так как данным vbs соответствуют константы, но отображаются не имена констант, а их значения. Так, типу String соответствует константа vbString, её числовое значение 8.
Ниже я привел список констант для определения типов данных vbs и их числовые значения, что чему соответствует ясно и из названия:
- vbEmpty — 0
- vbNull — 1
- vbInteger — 2
- vbLong — 3
- vbSingle — 4
- vbDouble — 5
- vbCurrency — 6
- vbDate — 7
- vbString — 8
- vbObject — 9
- vbError — 10
- vbBoolean — 11
- vbVariant — 12
- vbDataObject — 13
- vbDecimal — 14
- vbByte -17
- vbArray – 8204 (хотя может вернуть и другое число)
Что бы показать вам, как назначаются vbs типы данных, мы рассмотрим следующий скрипт:
'********************************* 'type_3.vbs 'Типы данных vbs '********************************* dim var_empt 'Empty dim var_null 'Null dim var_byte 'Byte dim var_int 'Integer dim var_long 'Long dim var_curr 'Currency dim var_date 'Date dim var_boll 'Boolean dim var_str 'String dim var_obj 'Object dim var_arr(3) 'Array dim var_list 'Будут хранить список var_list="" var_null = Null var_byte = 0 var_int = -2345 var_long = 147483648 var_curr = 5.345 var_date = #30/12/1986# var_boll=False 'Ссылка на объект set var_obj=CreateObject("Scripting.FileSystemObject") var_list=var_list & "var_empt " & vbTab & TypeName(var_empt) & vbcrlf var_list=var_list & "var_null " & vbTab & vbTab & TypeName(var_null) & vbcrlf var_list=var_list & var_byte & " " & vbTab & vbTab & TypeName(var_byte) & vbcrlf var_list=var_list & var_int & " " & vbTab & vbTab & TypeName(var_int) & vbcrlf var_list=var_list & var_long & " " & vbTab & TypeName(var_long) & vbcrlf var_list=var_list & var_curr & " " & vbTab & vbTab & TypeName(var_curr) & vbcrlf var_list=var_list & var_date & " " & vbTab & TypeName(var_date) & vbcrlf var_list=var_list & var_boll & " " & vbTab & vbTab & TypeName(var_boll) & vbcrlf var_list=var_list & "Массив" & vbTab & vbTab & VarType(var_arr) & vbcrlf var_list=var_list & "Объект" & vbTab & vbTab & VarType(var_obj) MsgBox (var_list) |
Помимо функции TypeName можно использовать:
VarType – аналог TypeName, просто вместо названия будет возвращаться число, IsArray, IsDate, IsEmpty, IsNull, IsNumeric и IsObject позволяют проверить типы данных vbs на их логическое соответствие.
Рассматривая результат работы данного примера можно заметить, что для числа 0 вместо ожидаемого типа byte, функция вернула vbs тип данныхInteger, так как byte входит в диапазон integer. Для переменной var_arr, которая хранит массив, нам вернуло variant(), а для переменной var_obj функция TypeName вернула имя объекта FileSystemObject. Что бы явно указать типы данных vbs стоит использовать специальные функции, с ними мы познакомимся в следующем уроке.
Не понятен пример с типом NULL, IS (NOT) NULL