
- •Переменные, массивы и константы
- •Примечание
- •Примечание
- •Операторы условия и цикла
- •Примечание
- •Примечание
- •Примечание
- •Примечание
- •Примечание
- •Примечание
- •Процедуры
- •VbScript предусматривает создание двух типов процедур:
- •Объектная модель и взаимодействие с элементами документа
- •Функции и объекты ядра vbScript
- •InputBox(подсказка, заголовок, умалч_знач, х, у)
- •Примечание
- •Примечание
- •Примечание
- •Примечание
Язык VBScript
Язык создания сценариев VBScript разработан фирмой Microsoft и является подмножеством достаточно распространенного в среде программистов языка Visual Basic разработки прикладных Windows-приложений. Как и его родитель, язык VBScript достаточно прост и легок в изучении.
Преимуществом его применения для создания сценариев является возможность использования, с небольшими корректировками, ранее написанных процедур на языках Visual Basic и Visual Basic for Application.
Функциональные возможности сценариев, написанных на VBScript, ничем не отличаются от возможностей сценариев JavaScript: динамическое создание документа или его частей, перехват и обработка событий и т. д.
VBScript используется для написания сценариев клиента (в этом случае браузер должен иметь встроенный интерпретатор этого языка), а также для написания сценариев на сервере (в этом случае сервер должен поддерживать язык VBScript). Для создания сценариев клиента используется набор объектов, аналогичный набору объектов JavaScript (см. выше раздел "Язык создания сценариев JavaScript"). Объекты клиента и сервера отличаются друг от друга, но существует общая часть (ядро) объектов, используемых при разработке, как сценариев клиента, так и сценариев сервера.
Основные понятия
В этом разделе вводятся основные понятия языка VBScript, необходимые для написания кода сценариев.
Типы данных
В VBScript определен только один тип данных — variant. Это универсальный тип, в котором можно хранить информацию, представленную другими типами данных, применяемыми в программировании, начиная от простейшего целого и заканчивая объектами.
В своем простейшем использовании тип variant содержит либо числовые данные, либо символьные строки — типы данных, наиболее часто встречаемые при написании сценария. Реально содержащиеся в вариантном типе данные могут быть одного из типов, называемых подтипами типа variant, представленных в табл. 9.10. Собственно говоря, эти подтипы охватывают все возможные типы данных, которые используются в языках Visual Basic и Visual Basic for Application.
Таблица 9.10. Подтипы данных, хранящихся в типе variant
Подтип |
Описание |
Функция преобразования |
Empty |
Переменная не инициализирована |
|
Null |
Переменная не содержит никаких допустимых данных |
|
Error |
Содержит номер ошибки |
|
Boolean |
Содержит значения либо True, либо False |
СВооl |
Byte |
Содержит целые числа в диапазоне от 0 до 255 |
CByte |
Integer |
Содержит целые числа в диапазоне от -32 768 до 32 767 |
CInt |
Currency |
Значения в диапазоне от -922 337 203 685 477.5808 до 922 337 203 685 477.5807 |
CCur |
Long |
Содержит целые числа в диапазоне от -2 147 483 648 до 2 147 483 647 |
CLng |
Single |
Содержит вещественные числа с плавающей точкой одинарной точности в диапазоне от -3.402823Е38 до -1 .401 298Е-45 для отрицательных значений и от 1 .401298Е-45 до 3.402823Е38 для положительных значений |
CSng |
Double |
Содержит вещественные числа с плавающей точкой удвоенной точности в диапазоне от -1.7976931 3486232Е308 до -4.94065645841 247Е-324 для отрицательных значений и от 4.94065645841 247Е-324 до 1. 7976931 3486232Е308 для положительных значений |
CDbl |
Date (Time) |
Содержит число, которое представляет дату в диапазоне от 1 января 100 года до 31 декабря 9999 года |
CDate |
String |
Содержит строку переменной длины (до 2 миллионов символов) |
CStr |
Object |
Содержит ссылку на объект |
|
Первые три подтипа, собственно говоря, не являются подтипами, а представляют значения, которые может принимать вариантный тип.
Значение Empty имеет переменная, которая была объявлена в операторе Dim (см. ниже), но ей еще не присваивали никакого значения. Это значение считается равным 0 в математических операциях и равным пустой строке ("") в операциях со строковыми значениями.
Значение Null означает, что переменная не содержит данных. Его не следует путать со значением Empty. Вариантная переменная может получить значение Null в результате выполнения некоторых операций над ней. Это значение можно присвоить переменной, тогда как значение Empty — нельзя.
Значение Error — это специальное значение, которое используется для указания возникновения ошибки в процедуре.
Каждый подтип данных задается с помощью литералов (символьных констант). Числовые литералы представляют собой целые числа, действительные числа с плавающей или фиксированной точкой. Примеры числовых литералов приведены ниже:
23 |
' Целое число |
-23.78 |
' Действительное число с фиксированной точкой |
-237.8Е-1 |
' Действительное число с плавающей точкой |
Строковые литералы задаются в виде последовательности символов, заключенных в двойные кавычки ("):
"Это строковый литерал".
Литералы даты и времени заключаются между символами числовых знаков (#). VBScript поддерживает большое число форматов даты и времени. Следующие примеры показывают правильные литералы даты и времени, соответствующие дате 10 июня 1999 года:
#10-6-99 22:20#
#10/6/99#
#10/6/99 10:20pm#
Внутренне литералы даты и времени представляются в виде действительных чисел удвоенной точности. Целая часть представляет количество дней, прошедших от даты 30 декабря 1899 года, а дробная часть — время суток.
Булевы литералы True и False являются константами целого типа, принимающими соответственно значения 1 и 0. Любое числовое значение, не равное нулю, преобразуется функцией CBool в True, а нулевое значение (целое или действительное) — в False.
Вариантный тип данных при использовании в выражениях в качестве операндов разнообразных операторов языка обрабатывается в зависимости от подтипа содержащихся в нем данных. Например, при использовании переменных этого типа данных в операторе сложения (+) результат зависит от того, какие подтипы данных в них содержатся. Если хотя бы один из операндов содержит число, то результатом будет сумма значений двух переменных (содержимое второго операнда преобразуется к числовому подтипу), если оба операнда содержат строковые данные, то результатом будет конкатенация строк.
Вариантный тип данных предоставляет программисту более эффективный способ обработки и хранения данных, не заботясь о типе хранимых данных. Если, например, при вычислениях первоначально в переменной вариантного типа хранилось значение типа Byte (число в диапазоне от 0 до 255), и в результате выполнения некоторых действий это значение стало отрицательным, то просто изменится представление этого числа в переменной (оно станет типа integer) и не возникнет никакой ошибки. Правда, за это удобство приходится платить используемой памятью: для вариантного типа данных вне зависимости от хранимого подтипа нужно 16 байт памяти.
Иногда в некоторых вычислениях необходимо явно преобразовать содержащийся в переменной подтип в другой. Для этого в VBScript имеется ряд функций преобразования в соответствующие типы. В табл. 9.10 последний столбец содержит имена функций преобразования в соответствующий подтип. Эти функции в качестве параметра принимают литералы, переменные и выражения.
Переменные, массивы и константы
Переменные используются для хранения данных приложения. Прежде чем переменную можно будет использовать, ее необходимо объявить. Это можно осуществить явным способом с помощью оператора Dim, или неявным — просто использовать имя переменной в операторе присваивания. Синтаксис оператора явного объявления переменной следующий:
Dim имя_переменной
Параметр имя_переменной — имя объявляемой переменной. Оно должно начинаться с буквы, не содержать пробелов, точку (.), восклицательный знак (О, а также символов (@), (&), ($), (#) и не превышать длину в 255 символов.
Язык VBScript не чувствителен к регистру. Это означает, что в нем не различаются строчные и прописные буквы. Поэтому, например, и M, и м будут ссылаться на одну и ту же переменную, если используются в качестве идентификатора переменной.
В одном операторе Dim можно объявлять несколько переменных, которые в списке параметров задаются через запятую.
Так как в VBScript определен только один тип данных variant, то и все, используемые в приложении переменные, также имеют тип variant.
Примечание
Вместо оператора Dim можно использовать операторы Private и Public для объявления переменной. Эти операторы, наследуемые VBScript от Visual Basic и задающие там локальные и открытые переменные соответственно, в VBScript выполняют функции, аналогичные оператору Dim.
Иногда возникает необходимость хранить данные в массивах, обращаясь к ним с помощью индекса. VBScript поддерживает одномерные и многомерные массивы двух типов:
Статические массивы
Динамические массивы
Любой тип массива определяется оператором Dim. Отличие от объявления переменной заключается в том, что после имени массива в круглых скобках указывается его размерность. Синтаксис задания массива следующий:
Dim имя_массива([индексы])
Параметром индексы задается число размерностей массива и протяженность каждой размерности. Если этот параметр представляет одно целое число, то он задает одномерный массив, содержащий число элементов на единицу больше значения параметра. Это связано с тем, что первый элемент массива имеет индекс нуль. Например, следующий оператор
Dim M(9)
задает массив, состоящий из 10 элементов: первый элемент— м(0), второй — М(1) и т. д.
Если параметр индексы задан в виде последовательности целых чисел, разделенных запятыми, то оператор Dim задает многомерный массив. Количество чисел в списке определяет число размерностей массива, а значение каждого индекса равно количеству элементов массива, соответствующих этой размерности, минус единица. Следующий оператор задает двумерный массив, или таблицу из 10 строк и 4 столбцов:
Dim В (9,3)
Для получения значения элемента массива следует указать имя массива и индексы элемента. Например, чтобы получить значение элемента, находящегося на пересечении второй строки и третьего столбца массива в, следует использовать запись
B(1,2)
Число размерностей можно задавать до 60, хотя следует учитывать, что с увеличением числа размерностей катастрофически увеличивается требуемое количество памяти для размещения массива.
Задание параметра индексы определяет так называемые статические массивы, т. е. массивы, количество элементов и размерности которых известны и не могут быть изменены в процессе выполнения приложения.
Если при задании массива отсутствует параметр индексы, то такая конструкция определяет динамический массив, размерность и протяженность каждой размерности которого могут меняться в процессе выполнения программы. Для задания числа размерностей и их протяженности применяется оператор ReDim, синтаксис которого аналогичен синтаксису оператора Dim при задании статических массивов:
Dim Array()
...
ReDim Array(3)
...
В этом фрагменте оператор Dim задает динамический массив Array, а в операторе ReDim назначается его размерность.
В программе можно неограниченное число раз изменять размерности динамических массивов. Следует только учитывать, что при новом переопределении размерности массива, его предыдущие элементы могут быть потеряны.
Во избежание потери старых значений элементов динамического массива при новом его распределении, следует использовать в операторе ReDim ключевое слово Preserve, как показано в следующем примере:
Dim Array()
...
ReDim Array(3)
...
ReDim Preserve Array(Ubound(Array)+1)
...
В этом фрагменте используется функция ubound для определения верхней границы изменения индекса массива Array, затем его протяженность увеличивается на единицу с сохранением предыдущих значений элементов.