Сайт о телевидении

Сайт о телевидении

» » @я-дизайн проект - язык vbscript. Скриптовый язык для web-страниц VBScript

@я-дизайн проект - язык vbscript. Скриптовый язык для web-страниц VBScript

Типы данных

В языке VBScript используется единственный тип данных – Variant (Вариант), который позволяет хранить в переменной число, строку, дату, булевское значение, ссылку на объект и другую информацию. Определить тип содержимого переменной можно с помощью набора функций: VarType , TypeName, IsArray, IsDate, IsEmpty, IsNull, IsNumeric, IsObject, которые будут рассмотрены ниже. Тип содержащейся информации еще называется подтипом варианта. Полный список подтипов приведен в следующей таблице:

Подтип Описание
Empty Переменной не присвоено значение. При использовании неинициализированной переменной в числовых выражениях, будет подставляться 0, а в строковых – пустая строка.
Null Переменная не содержит данных.
Boolean Булевская переменная может принимать значения True, или False.
Byte Целое число в диапазоне от 0 до 255.
Integer Целое число в диапазоне от -32 768 до 32 767.
Currency Число с фиксированной точкой в диапазоне от -922 337 203 685 477.5808 до 922 337 203 685 477.5807.
Long Целое число в диапазоне от -2 147 483 648 до 2 147 483 647.
Single Число с плавающей точкой одинарной точности. Для отрицательных значений допустимый диапазон

от -3.402823E38 до -1.401298E-45. Для положительных – от 1.401298E-45 до 3.402823E38.

Double Число с плавающей точкой двойной точности. Для отрицательных значений допустимый диапазон от

79769313486232E308 до -4.94065645841247E-324. Для положительных -- от 4.94065645841247E-324 до 1.79769313486232E308.

Date (Time) Содержит число, представляющее дату в диапазоне от 1-го января 100 года, до 31 декабря 9999 года.
String Последовательность символов. Максимальная длина в районе 2-х миллиардов знаков.
Object Объект.
Error Номер ошибки.

В зависимости от выражения, в котором участвует переменная, ее содержимое будет автоматически приведено к нужному типу. Рассмотрим такой пример:

Option Explicit Sub TestVBScript Dim A, B A = 5 B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub

Так как в выражении участвует числовая переменная A , интерпретатор преобразует значение переменной B из строки "12" в число и просуммирует их:

Изменим макрос так, чтобы переменная А тоже содержала строку:

Option Explicit Sub TestVBScript Dim A, B A = "5" B = "12" Application.MessageBox A + B, "", vbOkOnly End Sub

Запустим его на выполнение. Теперь на экране появится результат слияния (конкатенции) двух строк, а не сумма их числовых представлений:

Во избежании путаницы с автоматическим приведением типов, рекомендуется использовать функции конверсии: CBool, CByte, CCur, CDate, CDbl, CInt, CLng, CSng, CStr.

Если результатом выражения должно быть именно слияние строк, а не сумма их числовых представлений, то следует использовать оператор & вместо +.

Переменные

Переменная – это удобное символьное обозначение области памяти, где приложение хранит некоторые данные. В процессе выполнения приложения значение переменной может изменяться. Перед использованием переменную следует объявить с помощью оператора Dim.

С помощью одного оператора можно объявить сразу несколько переменных, если перечислить их имена через запятую:

Dim Left, Right, Top, Bottom

При объявлении нет необходимости в указании типа данных, так как все переменные имеют тип Variant.

Если в первой строке текста скрипта не указано Option Explicit, то использовать переменные можно без объявления. Но, такой путь может привести к трудно выявимым ошибкам. Достаточно один раз ошибиться в написании имени переменной в тексте программы, чтобы получить непредсказуемый результат. Мы рекомендуем всегда указывать Option Explicit и объявлять переменные.

Имя переменной должно соответствовать следующим требованиям:

  • Начинаться с символа латинского алфавита;
  • Состоять только из символов латинского алфавита или из символов латинского алфавита и цифр;
  • Не превышать 255 символов в длину;
  • Быть уникальным в пределах своей области видимости.
  • Область видимости и время жизни

    Область видимости переменной определяется тем, где она была объявлена. Если внутри тела процедуры , то такая переменная называется локальной и доступна только в пределах этой процедуры. Если переменная объявлена в тексте скрипта, то она будет видима для всех процедур или функций определенных в этом скрипте. Локальные переменные могут иметь одинакове имена, если объявлены в разных процедурах.

    В дереве Проводника окна Редактора скрипт-объектов присутствует специальный раздел – Константы и переменные – для объявления глобальных переменных, видимых для всех скрипт-функций проекта.

    Интерпретатор выделяет память для локальных переменных в момент их объявления и высвобождает по выходу из процедуры. Глобальные переменные существуют с момента их объявления и пока скрипт не закончит свое выполнение. Применительно к Гедымину это означает, что глобальные переменные существуют на протяжении всего времени выполнения программы.

    Присваивание значения переменной

    Значение объявленной переменной присваивается с помощью оператора =. Имя переменной указывается слева от оператора, новое значение – справа. Например:

    A = 200 B = "Наименование"

    Скалярные переменные и массивы

    Переменная содержащая единственное значение называется скалярной. Иногда, возникает необходимость хранить несколько значений в одной переменной. В этом случае следует объявить массив. Синтаксис объявления идентичен объявлению скалярной переменной за тем исключением, что после имени в круглых скобках мы задаем размерность массива. Следующее объявление создаст массив из 12 элементов:

    Dim Monthes(11)

    В языке VBScript левая граница индекса массива всегда 0. Таким образом размер массива вычисляется, как число указанное в скобках плюс один. При присваивании значения элементу массива следует указать его индекс в круглых скобках:

    Monthes(0) = "Январь" Monthes(1) = "Февраль" Monthes(2) = "Март" ... Monthes(10) = "Ноябрь" Monthes(11) = "Декабрь"

    Аналогично, при обращении к значению элемента мы используем его индекс:

    MonthName = Monthes(5)

    Массив не обязательно должен быть одномерным. VBScript позволяет нам задать до 60 размерностей при объявлении массива. Например, следующий оператор создаст двумерный массив из 12 строк и двух колонок :

    Dim MonthDays(11, 1)

    При обращении к элементам многомерного массива следует указывать все индексы:

    MonthDays(0, 0) = "Январь" MonthDays(0, 1) = 31 MonthDays(1, 0) = "Февраль" MonthDays(1, 1) = 28 ...

    Выше мы объявляли массивы, размер которых не меняется в процессе работы программы. Если заранее не известно сколько элементов понадобится, то можно объявить динамический массив:

    Перед использованием следует установить размер динамического массива с помощью оператора ReDim:

    ReDim A(25)

    В процессе выполнения можно вызывать оператор ReDim многократно, каждый раз изменяя размер массива. Опция Preserve сохраняет значения элементов массива при изменении размера. Например, следующий код увеличит объявленный выше массив на пять элементов, оставив существующие нетронутыми:

    ReDim Preserve A(30)

    Помните, что при уменьшении размера массива, значения удаленных элементов будут безвозвратно утеряны. С помощью оператора Erase можно очистить элементы фиксированного массива или освободить память, занимаемую динамическим массивом.

    Dim A ReDim A(25) ... Erase A

    Константы

    Правилом хорошего тона является объявление констант для многократно используемых в тексте программы значений. Грамотно присвоенное имя константы улучшает читабельность, а само использование -- упрощает процесс внесения изменений в код. В отличие от переменных, значение константы нельзя изменить в процессе выполнения программы. Создание константы происходит с помощью оператора Const:

    Const CountryName = "Belarus" Const CountryCode = 375

    Несколько констант могут быть объявлены в рамках одного оператора, через запятую. Как и переменная, константа обладает своей областью видимости в зависимости от того, где (в процедуре или за ее пределами) и как (Public или Private) она была объявлена. Константы, созданные оператором Const без указания Public или Private являются общедоступными по-умолчанию.

    В дереве Проводника окна Редактора скрипт-объектов присутствует специальный раздел – Константы и переменные – для объявления глобальных констант, видимых для всех скрипт-функций проекта.

    Значения строковых констант заключаются в двойные кавычки.

    Значения типа Дата следует обрамлять символами решетки (#) и использовать американский формат: месяц/день/год. Например:

    Const Public IndependenceDay = #03/25/1918#

    Во избежание путаницы между константами и переменными рекомендуется использовать единый префикс для всех констант, например "con", или набирать имя константы в верхнем регистре.

    Для облегчения труда программиста VBScript содержит набор предопределенных констант .

    Операторы

    Операторы VBScript подразделяются на пять категорий: арифметические, сравнения, слияния, логические и присваивания.

    Арифметические операторы Оператор Пример использования Описание
    ^ number ^ exponent Возводит number в степень exponent. Number может быть меньше нуля только в случае целочисленной степени. Если один из операндов Null, все выражение принимает значение Null. Если несколько возведений в степень выполняются подряд, результат вычисляется слева направо.
    * number1 * number2 Произведение двух чисел. Если операнд имеет значение Empty, то он принимается равным нулю. Если хотя бы один из операндов Null, все выражение принимает значение Null.
    / number1 / number2 Вещественное деление двух чисел. Для операндов действуют правила аналогично оператору умножения.
    \ number1 \ number2 Целочисленное деление. Перед вычислением оба операнда приводятся к типу Byte, Integer или Long. В остальном действуют правила как для оператора деления.
    Mod number1 Mod number2 Остаток от целочисленного деления. Приведение операндов к целому, а также правила обращения с Empty и Null, как у целочисленного деления.
    + expression1 + expression2 Если оба операнда числа, результатом является их арифметическая сумма. Если оба операнда строки – слияние (конкатенция) двух строк. Если один операнд число, а другой строка, то строковый операнд будет преобразован в число и прибавлен к числовому. Если хотя бы один из операндов Null, все выражение принимает значение Null. Если оба операнда Empty, результат имеет целочисленное значение 0. Если только один оператор Empty, в качестве результата возвращается значение второго операнда.
    - number1 – number2 или - number В первом случае возвращает разность двух чисел. Во втором – инвертирует знак числа. Правила для операндов со значениями Null и Empty, как для оператора умножения.
    Операторы сравнения

    Формат использования операторов сравнения:

    Result = expression1 comparisonoperator expression2

    где используются следующие операторы сравнения: < (меньше), (больше), >= (больше или равно), = (равно), (не равно).

    В зависимости от типов и значений операндов, сравнение осуществляется следующим образом:

    Если То
    Оба операнда числа. Выполняется сравнение двух чисел.
    Оба операнда строки. Выполняется сравнение двух строк.
    Один из операндов число, а второй строка. Строковый операнд приводится к числу и выполняется сравнение двух чисел.
    Один из операндов Empty, а второй число. Операнд со значением Empty принимается равным 0.
    Один из операндов Empty, а второй строка. Операнд со значением Empty принимается равным пустой строке "". Осуществляется сравнение двух строк.
    Оба операнда Empty. Операнды считаются равными.
    Хотя бы один из операндов Null. Результат принимает значение Null.

    Специальный оператор Is применяется для сравнения двух объектных переменных и возвращает Истину, если обе переменных ссылаются на один и тотже экземпляр объекта.

    Операторы конкатенции

    Result = expression1 & expression2

    Если операнд не является строкой, он приводится к строковому типу. Если оба операнда Null, то результат также принимает значение Null, однако, в отличие от остальных операторов, если только один операнд Null, то он принимается равным пустой строке. Операнд, имеющий значение Empty, также воспринимается как пустая строка "".

    Логические операторы

    VBScript предоставляет нам следующие логические операторы:

  • Логическое исключение (Xor);
  • Логический эквивалент (Eqv);
  • Логическая импликация (Imp).
  • В качестве операндов логических операторов могут выступать булевские выражения или числовые значения. В первом случае результатом будет булевская константа, во втором – число. В зависимости от оператора подача на вход одного или двух значений Null может приводить к Null результату. Оператор Not является унарным и возвращает логическое отрицание выражения. Над числовым операндом оператор Not производит побитовую инверсию. Остальные логические операторы являются бинарными. В таблице ниже приведены результаты выполнения каждого из операторов в зависимости от значения операндов Exp1 и Exp2:

    Exp1 Exp2 And Or Xor Eqv Imp
    True True True True False True True
    True False False True True False False
    False True False True True False True
    False False False False False True True
    True Null Null True Null Null Null
    False Null False Null Null Null True
    Null True Null True Null Null True
    Null False False Null Null Null Null
    Null Null Null Null Null Null Null

    В жизни чаще всего используются операторы And и Or и гораздо реже – Xor. Нам не приходилось сталкиваться с использованием на практике операторов Eqv и Imp. Если вам тяжело разбираться с приведенной выше таблицей резюмируем действие данных операторов:

    • And принимает значение Истина только если оба операнда Истина. В любом другом случае – это либо Ложь, либо Null.
    • Or принимает значение Истина, если хотябы один из операндов Истина.
    • Xor принимает значение Истина, если значения операндов различаются и Ложь, если они одинаковы.

    При побитовом выполнении над числовыми операндами результат логического оператора определяется по следующей таблице:

    Exp1 Exp2 And Or Xor Eqv Imp
    0 0 0 0 0 1 1
    0 1 0 1 1 0 1
    1 0 0 1 1 0 0
    1 1 1 1 0 1 1
    Оператор присваивания

    Оператор присваивания (=) подробно описан в разделе "Переменные".

    Очередность применения операторов

    Если выражение содержит несколько операторов, то они применяются в соответствии с установленным порядком, который называется приоритетом операторов. Изменить порядок по-умолчанию можно с помощью круглых скобок. Выражение внутри скобок всегда вычисляется в первую очередь.

    В выражении, содержащем операторы разных категорий, арифметические действия выполняются в первую очередь, затем выполняются операторы сравнения и, в последнюю очередь, -- логические операторы. Все операторы сравнения имеют одинаковый приоритет и вычисляются слева-направо. Арифметические и логические операторы вычисляются в следующем порядке:

  • Возведение в степень (^);
  • Смена знака числа, унарный минус (-);
  • Умножение (*) и деление (/);
  • Целочисленное деление (\);
  • Остаток от целочисленного деления (Mod);
  • Сложение (+) и вычитание (-);
  • Слияние строк (&).
  • Если умножение и деление встречаются в одном выражении, то операции выполняются в порядке следования слева-направо. Аналогичное правило действует в случае одновременного присутствия операторов сложения и вычитания.

    Оператор слияния строк (&) не является арифметическим и по приоритету располагается между арифметическими операторами и операторами сравнения.

    Очередность для логических операторов установлена следующая:

  • Логическое отрицание, инверсия (Not);
  • Логическое умножение, коньюнкция (And);
  • Логическое сложение, дизьюнкция (Or);
  • Логическое исключение (Xor);
  • Логический эквивалент (Eqv);
  • Логическая импликация (Imp).
  • Условные выражения

    Условные выражения применяются для управления порядком выполнения команд программы и позволяют организовать переходы (ветвления) и повторения команд. Как правило, операторы сравнения используются вместе с условными выражениями.

    Выражение If..Then..Else

    Выражение условного перехода If позволяет выполнить ту или иную группу команд в зависимости от результата логического выражения или значения булевской переменной.

    Для выполнения единственной команды при выполнении заданного условия используется однострочный синтаксис выражения:

    Dim S If DatePart("w", Now) = vbMonday Then S = "Понедельник" Application.MessageBox S, "", vbOkOnly

    Обратите внимание, что секция Else в этом случае опущена. Для выполнения группы операторов следует заключить их между ключевыми словами Then и End If.

    Dim S If DatePart("w", Now) = vbMonday Then S = "Сегодня понедельник" Application.MessageBox S, "", vbOkOnly End If

    Если при выполнении условия требуется выполнить один код, а при невыполнении – другой, то используется синтаксис выражения с секцией Else:

    Dim S If DatePart("w", Now) = vbMonday Then S = "Сегодня понедельник" Else S = "Сегодня не понедельник" End If Application.MessageBox S, "", vbOkOnly

    При необходимости выбора из нескольких альтернатив подойдет синтаксис с конструкцией ElseIf:

    Dim S, D D = DatePart("w", Now) If D = vbMonday Then S = "Понедельник" ElseIf D = vbTuesday Then S = "Вторник" ElseIf D = vbWednesday Then S = "Среда" ... End If Application.MessageBox S, "", vbOkOnly

    Выражения If могут быть вложенными:

    Dim S, D D = DatePart("w", Now) If D = vbMonday Then S = "Понедельник" Else If D = vbTuesday Then S = "Вторник" Else If D = vbWednesday Then S = "Среда" Else ... End If End If End If

    Хотя количество секций ElseIf в условном выражении не ограничено, интенсивное их использование может привести к запутанному, неудобочитаемому коду. В случае выбора одной альтернативы из множества возможных в зависимости от значения некоторого селектора рекомендуется использовать выражение Select Case.

    Выражение Select..Case

    Перепишем пример с днями недели с использованием выражения выбора:

    Dim S Select Case DatePart("w", Now) Case vbMonday S = "Понедельник" Case vbTuesday S = "Вторник" Case vbWednesday S = "Среда" ... Case Else Err.Raise 32000, "", "Неизвестный день недели" End Select

    Так как выражение селектора вычисляется только один раз, использование Select..Case приводит к более эффективному коду. Рекомендуется всегда использовать секцию Case Else для отлавливания некорректных или необработанных значений селектора.

    Операторы цикла

    Довольно часто возникает ситуация, когда код требуется запустить повторно. Для этого следует написать оператор цикла, который повторяет определенные команды снова и снова. Операторы цикла используются во многих ситуациях: при вычислении итоговой суммы по списку чисел, перемещении по записям набора данных или для запуска блока кода для нескольких объектов. Существует несколько циклов, описанных в следующих разделах. Некоторые из них выполняются, пока условие имеет значение Истина, некоторые – пока Ложь. И, наконец, есть такие, которые выполняются заданное число раз.

    Оператор Do..Loop

    Данный оператор предназначен для выполнения группы команд пока заданное условие Истинно или до тех пор, когда оно не станет Истинным. Проверка условия может осуществляться как в начале цикла:

    Do [{While | Until} condition] Loop

    так и в конце:

    Do Loop [{While | Until} condition]

    Команда Exit Do может встречаться неограниченное число раз в теле цикла. Обычно она используется вместе с условным выражением If..Then и позволяет передать управление на оператор, следующий непосредственно за циклом. При использовании Exit Do внутри вложенного цикла, управление перейдет во внешний цикл.

    Следующий код позволяет заменить игральный кубик:

    Dim Resp, Num Do Num = Int(6 * Rnd + 1) Resp = Application.MessageBox(Num & " Еще число?", "",_ vbYesNo or vbQuestion) Loop Until Resp = vbNo

    While..Wend

    Представляет собой усеченную версию оператора Do..Loop и позволяет выполнять группу команд пока условие Истинно. Синтаксис оператора:

    While condition Wend

    Обратите внимание, что Exit Do не действует внутри данного цикла. Циклы While..Wend могут быть вложенными.

    For..Next

    Данный цикл повторяет заданный набор команд указанное число раз. Синтаксис оператора имеет вид:

    For counter = start To end Next

    Перед стартом цикла переменной counter присваивается значение start. Далее проверяется выполнение условия counter = 0, или counter >= end, при отрицательном шаге. После выполнение блока команд переменная counter увеличивается на значение step и все повторяется сначала.

    Изменение счетчика в теле цикла не запрещено, но настоятельно не рекомендуется, так как затрудняет понимание логики программы и ее отладку.

    Exit For может встречаться в теле цикла произвольное число раз. Циклы могут быть вложенными. Например, такой цикл инициализирует трехмерный массив:

    Dim A(9, 9, 9) Dim I, J, K For I = 0 To 9 For J = 0 To 9 For K = 0 To 9 A(I, J, K) = 1 Next Next Next

    For Each..Next

    Оператор цикла For Each..Next повторяет заданный набор команд для каждого элемента массива или коллекции и имеет следующий синтаксис:

    For Each element In group Next

    Цикл выполняется, если в массиве или коллекции присутствует хотябы один элемент. Exit For может встречаться в теле цикла произвольное количество раз.

    Проиллюстрируем использование For Each..Next на примере следующего кода, который выводит на экран список файлов из корневого каталога диска с:\

    Dim fso, f, f1, fc, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder("c:\") Set fc = f.Files For Each f1 in fc s = s & f1.name & vbNewLine Next Application.MessageBox s, "Файлы на c:\", vbOkOnly

    Процедуры

    Для экономии памяти и структурирования программы, фрагмент кода, вызываемый многократно в разных местах, может быть оформлен ввиде процедуры. В языке VBScript существуют два вида процедур: подпрограммы (Sub) и функции (Function). Подпрограмма – это последовательность операторов, обрамленная ключевыми словами Sub и End Sub. Подпрограмма может принимать на вход параметры, но не возвращает значения. Функция – последовательность операторов, заключенная между Function и End Function, -- возвращает результат и поэтому может быть использована в выражении. Каждая процедура должна иметь имя, уникальное в пределах модуля. Имена процедур, объявленных в глобальном модуле, должны быть уникальны в рамках всего проекта.

    Определение подпрограммы и функции имеет следующий синтаксис:

    | Private] Sub name [(arglist)] End Sub | Private] Function name [(arglist)] End Function

    Public процедуры являются глобальными и доступны во всех скриптах программы. Private процедуры доступны только в том скрипте, где они были объявлены. Если не указано иное, объявленная процедура является общедоступной. Ключевое слово Default может быть использовано только в теле класса и служит для указания метода по-умолчанию этого класса.

    Список параметров имеет следующий синтаксис:

    Varname [, ...]

    Параметры могут передаваться по значению (ByVal) или по ссылке (ByRef). По-умолчанию все параметры передаются по значению. Константы, результаты вычисления выражений могут быть переданы только по значению. Изменение параметра, переданного по ссылке, приведет к изменению значения наружной переменной. Поясним передачу параметров внутрь процедуры на следующем примере:

    Sub DoCalculation(ByRef A, ByVal B, ByVal C) A = C * 2 B = C / 2 End Sub Sub TestVar Dim V1, V2 V1 = 1 V2 = 2 DoCalculation V1, V2, 10 " После выполнения процедуры DoCalculation " V1 = 20 " V2 = 2 End Sub

    Переменные, объявленные внутри тела процедуры, являются локальными и уничтожаются по завершении ее выполнения. Значения локальных переменных не сохраняются.

    Список параметров указывается в круглых скобках при вызове функции или при вызове подпрограммы с помощью оператора Call . Так, вызов процедуры DoCalculation в приведенном выше примере мы могли написать следующим образом:

    Call DoCalculation(V1, V2, 10)

    Выражение Execute Классы VBScript

    VBScript позволяет создавать новые классы, которые в дальнейшем мы будем называть VB классами. Вообще говоря, полноценными классами в понимании объектно-ориентированного программирования они не являются, поскольку не поддерживают наследование и, соответственно, полиморфизм. Так что из трех китов, на которых базируется объектно-ориентированная парадигма остается только инкапсуляция - возможность объединять в рамках одной сущности данные и методы.

    Определение класса осуществляется с помощью следующей конструкции:

    Class name statements End Class

    где name - это имя класса, а statements - это одно или несколько определений переменных, свойств, процедур или функций, называемых так же членами класса. Обратите внимание, что в отличие от Delphi, где код определения класса содержит только объявления процедур и функций, в VB классе код членов прописывается прямо в тексте класса.

    Члены класса могут быть объявлены как Private или Public. Первые видны только внутри кода данного класса, вторые же доступны как для внутреннего кода, так и снаружи. Если переменная или функция (процедура) не содержат явного определения Public или Private, то они считаются общедоступными. Процедуры или функции объявленные как Public внутри блока класса становятся методами данного класса.

    Переменные, объявленные как общедоступные, становятся свойствами класса наравне со свойствами объявленными непосредственно с помощью конструкций Property Get, Property Let, Property Set.

    Определение свойств класса

    Выше мы уже говорили о том, что поля класса явно или не явно объявленные как Public, становятся его свойствами. Кроме этого, создать свойство класса можно определив специальные функции для считывания значения свойства (Property Get), а также для его присвоения (Property Let или Property Set).

    Синтаксис определения таких функций следующий:

    | Private] Property Get name [(arglist)] [ name = expression] [ name = expression] End Property Property Let name ( value) End Property Property Set name( reference) End Property

    Определив только одну функцию, считывания или присвоения, можно создать свойство, соответственно, только для чтения или записи. Процедура Property Let используется для присвоения простых типов данных, а Property Set для передачи ссылки на объект. Обратите внимание, что все три функции могут принимать на вход произвольный список параметров. Таким образом можно организовать, например, свойства-массивы, передавая в качестве аргумента индекс элемента.

    Создание и уничтожение экземпляра VB класса

    Создание экземпляра VB класса осуществляется с помощью оператора New.

    Dim X Set X = New classname

    Уничтожение ранее созданного экземпляра происходит автоматически по завершении блока кода, где была объявлена соответсвующая переменная и при условии, что на нее нет внешних ссылок. Если необходимо уничтожить экземпляр вручную, то необходимо присвоить значение Nothing переменной.

    ‘ объявление переменной и создание экземпляра класса Dim X Set X = New classname ... ‘ использование экземпляра класса... ‘ уничтожение экземпляра класса Set X = Notning ...

    События Initialize и Terminate

    Событие Initialize происходит при создании экземпляра класса, а Terminate - при его уничтожении. Разработчик может определить свои обработчики данных событий. Ниже приведен пример использования событий создания и удаления объекта:

    Class TestClass " Определение обработчика события Initialize. Private Sub Class_Initialize MsgBox("TestClass started") End Sub " Определение обработчика события Terminate. Private Sub Class_Terminate MsgBox("TestClass terminated") End Sub End Class " Создание экземпляра класса TestClass. " На экран будет выведено сообщение "TestClass started" Set X = New TestClass " Уничтожение экземпляра. " На экран будет выведено сообщение "TestClass terminated" Set X = Nothing

    В этом начальном уроке, мы изучим синтаксис vbscript языка. Синтаксис языка vbscript является таким же как и в языке Visual Basic и фактически, является подмножеством данного языка программирования. Основной упор в использовании vbscript – это возможность написания сценариев (расширение vbs) с открытым кодом для платформы Windows. Пользователю не нужно прибегать к установке дополнительного программного обеспечения, так как все сценарии выполняются под управлением сервера сценариев .

    И так, давайте рассмотрим базовый синтаксис vbscipt и его возможности.

    • Комментарии – для комментирования строк кода можно использовать ключевое слово REM , или одинарную кавычку (").
    • Строки кода – что бы произвести перенос одной строки на несколько, используется символ подчёркивания.
    • Переменные – для объявления переменных используется ключевое слово Dim . Более детально, работу с ними я рассмотрел в статье " "

    Можно прописать несколько операторов в одну строчку, для этого используется знак двоеточия (:). Сам язык нечувствителен к регистру символов.

    Хорошо, давайте рассмотрим синтаксис языка vbscript на таком примере:

    REM Общий синтаксис vbscript REM primer_1.vbs "**************************************** dim a, b, c a = "строка" b = 100 c = 22.5 MsgBox a:MsgBox b:MsgBox c

    Видим, что тут, мы вначале прописали комментарии, далее объявили три переменные. Как видим, язык vbscript не требует назначения типа данных (более детально, работу с типами данных я рассмотрел в статье – " "). В конце, для вывода данных мы использовали функцию MsgBox, в данном случае она прописана в упрощенном варианте. Давайте рассмотрим ее полный синтаксис:

    MsgBox(prompt[, buttons] [, title ][, helpfile, context ]) – видим, что тут, функции передаются пять параметров, последние два мы рассматривать не будет, так как они не являются актуальными и практически не применяются.

    • prompt – собственно, сообщение, которое надо вывести
    • buttons – позволяет задать дополнительные кнопки, их значения указываются через константы
    • title – заголовок окна

    Работу с данной функцией я более детально рассмотрел в статье " ".

    Язык vbscript предоставляют также функции для работы со строками и датой, а также, ряд математических функций.

    Конечно, синтаксис vbscript позволяет пользователю создавать собственные процедуры и функции. Для определения процедуры, т. е. подпрограммы, которая не возвращает никакого значения, в VBScript используется конструкция Sub ... End Sub . После ключевого слова Sub идёт имя процедуры, а в круглых скобках указывается список её пара­метров, например:

    Sub MyProcedure(Param1, Param2)
    Строки кода
    End Sub

    Если процедура не имеет параметров, то в скобках после имени ничего ука­зывать не нужно:

    Sub MyProcedure()

    End Sub

    Вызывать процедуру из сценария можно двумя способами. Во-первых, мож­но просто написать имя и указать через пробел список передаваемых параметров, например: MyProcedure 3,10. Во-вторых, можно использовать специальный оператор Call , при этом спи­сок параметров обязательно должен быть заключен в круглые скобки: Call MyProcedure(3,10) .

    Для определения функции, т. е. подпрограммы, которая возвращает опреде­ленное значение, применяется конструкция Function ... End Function . Как и при описании процедур, после названия функции в круглых скобках указывается список её параметров, например:

    Function MyFunction(Param1, Param2) … End Function

    Для того чтобы возвратить из функции какое-либо значение, нужно внутри неё присвоить это значение переменной, название которой совпадает с именем функции:

    Function MyFunction(Param1, Param2)
    Dim Sum
    Sum = Paraml+Param2
    MyFunction = Sum
    End Function

    Если возвращаемое функцией значение не нужно присваивать никакой пе­ременной, то функция вызывается так же, как и процедура - пишется имя этой функции и через пробел указывается список ее аргументов: MyFunction 3,5

    Если же необходимо записать значение в какую-либо переменную, то аргументы функции заключаются в круглые скобки.

    Вот простой пример синтаксиса vbscript для использования собственных процедур и функций:

    Помимо процедур и функций, можно создавать собственные массивы (


    Dynamik HTML
    © Питер, 2000

    Обработка массивов

    Dim -- объявляет переменную-массив. Она может быть статической с постоянным количеством элементов или динамической и может иметь до 60 измерений.
    ReDim -- используется для изменения размера переменной-массива, объявленной как динамическая.
    Preserve -- ключевое слово, используемое для сохранения содержимого массива при изменении его размера. Если вы используете это слово, вы можете изменять лишь элементы, находящиеся справа.

    Dim strEmpl ()
    ReDim strEmlp (9 , 1)

    strEmpl (9 , 1) = "Phil"

    ReDim strEmpl (9 , 2) " теряем содержимое элемента (9 , 1)
    strEmpl (9 , 2) = "Paul"

    ReDim Preserve strEmpl (9 , 3) " сохраняем содержимое элемента (9 , 2)
    strEmpl (9 , 2) = "Smith"

    LBound -- возвращает наименьший индех для данного массива. Учитывая, что массивы всегда начинаются с нулевого элемента, данная функция всегда будет возвращать ноль.
    UBound -- используется для задания размера массива.

    Dim strCustom (10,5)
    intSizeFirst = UBound (strCustom , 1) " присваиваем значение 10 переменной SizeFirst
    intSizeSecond = UBound (strCustom , 2) " присваиваем значение 5 переменной SizeSecond

    ПРИМЕЧАНИЕ На самом деле размер массива на 1 больше того, что возвращает UBound, так как массив всегда начинается с нулевого элемента.Операторы присваивания

    Let -- используется для присваивания переменной значения (необязателен)
    Set -- используется для присваивания переменной ссылки на объект.

    Let intNumberOf Days = 365
    Let txtTextBox = txtControl
    txtTextBox.Value = "Привет Всем!"

    Управляющие операнды

    For ... Next - выполняет часть кода заданное число раз.

    For counter = 1 to 12 result = 5 * counter MsgBox counter & " пять раз будет " & result Next counter

    For Each ... Next Statement - выполняет часть кода для всех элементов массива или коллекции.

    For Each Item In Request.QueryString("MyControl") Response.Write Item & "
    " Next

    Do ... Loop - выполняет часть кода до тех пор, пока условие выполняется, или до тех пор, пока оно не станет выполнятся (в зависимости от конструкции).

    password = InputBox("Введите ваш пароль") Do Until possword = "No Pasaran" MsgBox "Неправильно введенный пароль. Попробуйте еще раз!" password = InputBox("Введите ваш пароль") Loop или... Do MsgBox ("Вставай, пора работать!") ... Loop Until strDayOfWeek = "Суббота" Or strDayOfWeek = "Воскресенье" или... Do While strDayOfWeek "Суббота" And strDayOfWeek "Воскресенье" MsgBox ("Вставай, пора работать!") ... Loop

    If ... Then ... Else - используется для запуска различных блоков кода при выполнении различных условий.

    If AmountPurchased >10000 Then DiscountAmount = AmountPurchased * .10 Subtotal=AmountPurchased - DiscountAmount Else HandlingFee = AmountPurchased * .3 Subtotal=AmountPurchased + HandlingFee End If

    Select Case - используется для замены оператора If ... Then ... Else при большом количестве условий.

    Select Case Document.frmOrder.txtState.Value Case "California" ShippingFee = .04 Case "Florida" ShippingFee = .03 Case Else ShippingFee = .02 End Select

    While ... WEnd - выполняет блок кода, пока выполняется условие.

    While strDayOfWeek "Суббота" And strDayOfWeek "Воскресенье" MsgBox ("Вставай, пора работать!") ... WEnd Объявление переменных

    Dim -- объявляет переменную.

    Обработка ошибок

    On Error Resume Next - указывает, что при появлении ошибки необходимо ее игнорировать и начать дальнейшую обработку кода со следующей строки.
    Err - объект error , содержащий информацию об ошибках выполнения.

    Возможности для обработки ошибок в VBScript ограничены, и для выяснения, произошла ли ошибка, необходимо явно проверять объект Err .

    Операции ввода-вывода

    Для вывода сообщений служит конструкция MsgBox , для ввода - InputBox .

    MsgBox

    Она выдает сообщение и может возвращать значение, показывающее, какая кнопка нажата.
    MsgBox "Hello There", 35, "Hello Message"

    Параметры:

    "Hello There" -- содержит текст сообщения. Это обязательный параметр.
    35 -- указывает, какие картинка и кнопки появятся в окне сообщения.
    "Hello Message" -- текст заголовка окна сообщения.

    Если добавить путь к файлу справки (например: "\win\help\MyHelp.hlp"), то в окне появится кнопка Help и определяется, какой файл справки будет вызван при ее нажатии.

    Значения пареметра, определяющего картинку и кнопки:

    Константа Значение Кнопки
    vbOkOnly 0 Ок
    vbOkCancel 1 Ок & Cancel
    vbAbortRetryIgnore 2 Abort & Retry & Ignore
    vbYesNoCancel 3 Yes & No & Cancel
    vbYesNo 4 Yes & No
    vbRetryCancel 5 Retry & Cancel
    vbDefaultButton1 0 По умолчанию активна первая кнопка слева
    vbDefaultButton2 256 По умолчанию активна вторая кнопка слева
    vbDefaultButton3 512 По умолчанию активна третья кнопка слева
    vbDefaultButton4 768 По умолчанию активна четвертая кнопка слева
    Константа Значение Описание (картинка)
    vbCritical 16 Важное сообщение
    vbQuestion 32 Вопрос
    vbExclamation 48 Предупреждение
    vbInformation 64 Информационное сообщение
    Константа Значение Описание
    vbApplicationModal 0 Пока пользователь не нажмет кнопку, работа приложения останавливается.
    vbSystemModal 4096 Пока пользователь не нажмет кнопку, останавливается работа всей системы.

    Для задания конкретной картинки и кнопок необходимо сложить соответствующие величины. Так, в примере сложили 32+3 для изображения кнопок Да, Нет и Отмена, где Да - активна по умолчанию, и картинка вопроса.

    Можно определить, какая кнопка нажат, присвоив значение, возвращенное функцией MsgBox переменной:

    intButtonClicked = MsgBox ("Hello There", 35, "Hello Message")

    Заметим, что при использовании такой инструкции параметры функции заключены в скобки. В следующей таблице показаны значения, присваемые при этом переменной intButtonClicked .

    Константа Значение Нажатая кнопка
    vbOk 1 Ok (О`кей)
    vbCancel 2 Cancel (Отмена)
    vbAbort 3 Abort (Стоп)
    vbRetry 4 Retry (Повтор)
    vbIgnore 5 Ignore (Пропустить)
    vbYes 6 Yes (Да)
    vbNo 7 No (Нет)
    InputBox

    Воспринимает текстовую запись пользователя и передает ее коду как строку.
    strEntered=InputBox ("Введите ваше имя, пожалуйста", "Login", "Джон Смит", 500, 500)
    MsgBox "Hello There" & strEntered, 35, "Hello Message"

    "Введите ваше имя, пожалуйста" - строка, показываемая в окне ввода.
    "Login" - сообщение в заголовке.
    "Джон Смит" - значение, определенное по умолчанию для поля ввода.
    500 - определяет координату по горизонтали окна ввода.
    500 - определяет координату по вертикали окна ввода.

    Аналогично можно задать файл подсказки и кнопку для его вызова.

    Процедуры

    Call - необязательный метод для вызова подпрограммы.
    Function - используется для объявления функции.
    Sub - используется для объявления подпрограммы.

    В данном примере инструкция Function используется для объявления имени, аргументов и кода, составляющих основу процедуры Function.

    " Следующая функция, определенная пользователем, возвращает " квадратный корень из переданного ей аргумента. Function CalculateSquareRoot(NumberArg As Double) As Double If NumberArg

    В данном примере инструкция Sub используется для описания имени, аргументов и кода, составляющих основу процедуры Sub.

    " Описание процедуры Sub. " Процедура Sub с двумя аргументами. Sub SubComputeArea(Length, TheWidth) Dim Area As Double " Объявляет локальную переменную. If Length = 0 Or TheWidth = 0 Then " Если хотя бы один из аргументов равен 0. Exit Sub " Немедленно завершает процедуру Sub. End If Area = Length * TheWidth " Вычисляет площадь прямоугольника. Debug.Print Area " Выводит полученное значение в окно отладки. End Sub Другие ключевые слова

    Rem - старый метод для добавления комментариев в код.
    Option Explicit - заставляет объявлять переменную до того, как она может быть использована.

    А так же на страницах сайта можно прочесть о VBScript:
    Константы | Учебник по VBScript | Функции | Коды ошибок выполнения На главную |


    Процедуры

    Процедуры - это относительно самостоятельные фрагменты программы, оформленные особым образом и обозначенные именами. Упоминание этих имен в тексте программы называется вызовами процедур. Процедуры помогают разбить программу на ряд независимых частей, что необходимо для экономии памяти. Каждая процедура существует в программе в единственном экземпляре, но обращаться к ней можно из разных точек программы. При вызове процедуры вступает в действие последовательность операторов, которые находятся внутри этой процедуры. Процедуре могут быть переданы некоторые параметры.

    Виды процедур


    В VBScript существует два вида процедур: подпрограмма (Sub) и функция (Function). Подпрограмма (Sub) - это последовательность VBScript-операторов, обрамляемая операторами Sub и End Sub. Подпрограммы могут принимать параметры (константы, переменные или выражения, которые передаются при вызове процедуры), но не возвращают значений. Если подпрограмма не содержит параметров, то ее оператор должен включать пустой набор круглых скобок. Следующая подпрограмма использует две функции языка VBScript - InputBox и MsgBox. Она запрашивает у пользователя ввод температуры в градусах Фаренгейта, переводит ее в градусы Цельсия и отображает результат. Вычисление температуры происходит в функции Celsius.

    Функция (Function) - это последовательность операторов VBScript, обрамляемая операторами Function и End Function. Она похожа на подпрограмму, но отличается от последней тем, что может возвращать некоторое значение. Функция может принимать параметры (константы, переменные или выражения, передаваемые при вызове). Если она не содержит параметров, то оператор Function должен включать пустой набор круглых скобок. Возвращаемый тип у Function - Variant.

    В следующем примере функция Celsius переводит градусы Фаренгейта в градусы Цельсия. Когда вызывается функция из подпрограммы ConvertTemp, переменная, содержащая параметр-значение, передается в функцию. Результат вычисления возвращается в вызывающую процедуру и отображается в MsgBox.

    Перед использованием процедур в своей программе вы должны их объявить. Их нужно всегда размещать в самом начале раздела вашей HTML-странички. Весь последующий текст должен также находиться в разделе . Операторы Function и Sub, подобно другим элементам языка VBScript, располагаются между парой тегов для правильного их распознавания браузером. Кроме того, теги комментария () окружают текст программы внутри тега , гарантируя, что сценарий не будет отображаться в браузерах, которые не поддерживают VBScript.

    Любые данные передаются в ваши процедуры в виде параметров. При создании подпрограммы (или функции) после ее имени должны быть круглые скобки. Любые параметры внутри них отделяются запятыми. В следующем примере параметр fDegrees передает значения в функцию Celsius для преобразования:

    Используйте функции вместо подпрограмм, если требуется возвратить некоторое значение.

    Использование подпрограмм и функций


    Для применения функций в вашей программе необходимо поставить ее название справа от переменной или выражения, в которое будет возвращаться результат выполнения функции, например:

    Чтобы вызвать одну процедуру из другой, необходимо написать имя первой со значениями требуемых параметров, каждый из которых должен отделяться от предыдущего запятой. Оператор Call не требуется. Но если вы все-таки используете его, то нужно заключить любые параметры в круглые скобки. Следующий пример показывает две возможности вызова процедуры MyProc. Один использует оператор Call, другой - нет. Оба выполняют одно и то же.

    Обратите внимание, что круглые скобки опускаются при вызове подпрограммы, если оператор Call не применяется.