Урок 3 по VBScript: Типы данных

Урок 3 по VBScript: Типы данных Программирование на VBSCRIPT

В данной статье мы рассмотрим типы данных 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 с заданными значениями

Основные типы данных 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 — является ссылкой на объект;
VBScript: Empty, Null, String Boolean и 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, просто вместо названия будет возвращаться число, IsArrayIsDateIsEmptyIsNullIsNumeric и IsObject позволяют проверить типы данных vbs на их логическое соответствие.

Скачать архив с примерами

Рассматривая результат работы данного примера можно заметить, что для числа 0 вместо ожидаемого типа byte, функция вернула vbs тип данныхInteger, так как byte входит в диапазон integer. Для переменной var_arr, которая хранит массив, нам вернуло variant(), а для переменной var_obj функция TypeName вернула имя объекта FileSystemObject. Что бы явно указать типы данных vbs стоит использовать специальные функции, с ними мы познакомимся в следующем уроке.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий

  1. Alex

    Не понятен пример с типом NULL, IS (NOT) NULL

    Ответить