Как написать функцию в vbscript. Скриптовый язык для web-страниц VBScript. Использование подпрограмм и функций

В данном уроке речь пойдёт о функции Function … End Function - подпрограммы, которая возвращает определённое значение и о процедуре Sub … End Sub - подпрограмме, которая ничего не возвращает. Парой они могут оказаться просто жизненно необходимыми при решение некоторых задач в сценариях VBScript .

Функция Function … End Function.

Язык VBScript позволят создавать собственные функции и процедуры и в этом нам сейчас предстоит разобраться.

Функция (Function … End Function) может пригодиться нам когда нужно выполнить одно и то же действие (сценарий, по другому - выражение) несколько раз, но с разными данными. Вместо того, что бы по сто раз дублировать одно и то же выражение, можно записать его только один раз.

Вначале идёт ключевое слово Function , а после него идёт название функции, которое Вы придумываете сами. После её названия в круглых скобках, через запятую, указываются параметры функции. Далее уже идёт тело функции, которое закрывается ключевыми словами End Function . Давайте посмотрим пример:

"Урок VBScript №3 "file_1.vbs dim a, b Function fun_name(a, b) Dim rezult rezult = a+b fun_name = rezult "присваиваем значение функцие, которое она нам вернёт End Function MsgBox fun_name(5,110) MsgBox fun_name(15,16) MsgBox fun_name(25,15)

"Урок VBScript №3

"Функции (Function ... End Function) и процедуры (Sub ... End Sub)

"file_1.vbs

dim a , b

Function fun_name (a , b )

Dim rezult

rezult = a + b

fun_name = rezult "присваиваем значение функцие, которое она нам вернёт

End Function

MsgBox fun_name (5 , 110 )

MsgBox fun_name (15 , 16 )

MsgBox fun_name (25 , 15 )

На примере видно, что в функции можно объявлять свои переменные. Так же можно в теле самой функции, присвоить переменной значение которое она нам вернёт. Эта переменная имеет такое же название, что и функция. Это нужно для того что бы функция возвращала нам значения при её вызове с помощью MsgBox в конце примера. Если этого не надо, то функция вызывается так: fun_name 5,110 (без скобок) .

С этим вроде бы всё понятно. Теперь идём дальше.

Процедура Sub … End Sub.

Процедура Sub … End Sub можно использовать в тех же целях, что и функцию (Function … End Function), но с одним условием - она не возвращает значение. Всё происходит в теле самой процедуры.

Процедура объявляется ключевым словом Sub , далее идёт произвольное имя процедуры и в круглых скобках её значение. Закрывается процедура ключевыми словами End Sub . Давайте посмотрим на пример:

"Урок VBScript №3 "Функции (Function ... End Function) и процедуры (Sub ... End Sub) "file_2.vbs dim a, b Sub sub_name(a, b) Dim rezult rezult = a+b MsgBox rezult End Sub Call sub_name(5,110) Call sub_name(15,16) Call sub_name(25,15) sub_name 25,1

"Урок VBScript №3

"Функции (Function ... End Function) и процедуры (Sub ... End Sub)

"file_2.vbs

dim a , b

Sub sub_name (a , b )

Омский Государственный Педагогический Университет

Кафедра информатики

курсовая работа

Сравнительный анализ языков программирования JavaScript и VBScript

Проверил: Кирьякова И.В.

Выполнил: Поросков Д.В.

Группа: 34

Введение ….3

Общий обзор языка …4

Типы данных …5

Переменные …8

Операторы …10

Операторы управления …13

Процедуры …19

Объекты …21

Список литературы …24

Введение

Объектные модели языков сценариев тесно связаны с тэгами HTML. При загрузке

страницы HTML в браузер интерпретатор языка создает объекты со свойствами,

определенными значениями тэгов страницы. Говорят, что браузер отражает HTML-

страницу в свойствах объектов, и иногда этот процесс называют отражением

(reflection). Созданные объекты существуют в виде иерархической структуры,

отражающей структуру самой HTML-страницы. На верхнем уровне расположен

объект window, представляющий собой активное окно браузера. Далее вниз по

иерархической лестнице следуют объекты frame, document, location и history,

представляющие соответственно фрейм, непосредственно сам документ, адрес

загружаемого документа и список ранее загружавшихся документов, и т.д.

Значения свойств объектов отражают значения соответствующих параметров

тэгов страницы или установленных системных параметров.

Для правильного использования объектных моделей следует четко понимать, как

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

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

происходит компоновка страницы и ее отображение в окне браузера. А это

означает, что и объектная модель страницы также формируется

последовательно, по мере ее обработки. Поэтому невозможно обратится из

сценария, расположенного ранее какой-либо формы на странице, к элементам

этой формы. Всегда следует помнить о том, что браузер последовательно

сверху вниз интерпретирует содержимое HTML-страницы.

Еще один аспект работы с объектами языков сценариев заключается в том, что

нельзя изменить свойства объектов. Браузер обрабатывает страницу только

один раз, компонуя и отображая ее. Поэтому попытка в сценарии изменить

свойство отображенного элемента страницы, обречена на провал. Только

Общий обзор языка

Язык программирования JavaScript разработан фирмой Netscape для создания

интерактивных HTML-документов. Это объектно-ориентированный язык разработки

встраиваемых приложений, выполняющих как на стороне клиента, так и на

стороне сервера. Синтаксис языка очень похож на синтаксис языка Java –

поэтому его часто называют Java-подобным. Клиентские приложения выполняются

браузером просмотра Web-документов на машине пользователя, серверные

приложения выполняются на сервере.

При разработке обоих типов приложений используется общий компонент языка,

называемый ядром и включающий определения стандартных объектов и

конструкций (переменные, функции, основные объекты и средство LiveConnect

взаимодействия с Java-апплетами), и соответствующие компоненты дополнений

объектов.

Клиентские приложения непосредственно встраиваются в HTML-страницы и

интерпретируются браузером по мере отображения частей документа в его окне.

Серверные приложения для увеличения производительности предварительно

компилируются в промежуточный байт-код.

Основные области использования языка JavaScript при создании интерактивных

HTML-страниц:

Динамическое создание документа с помощью сценария

Оперативная проверка достоверности заполняемых пользователем полей форм

HTML до передачи их на сервер

Создание динамических HTML-страниц совместно с каскадными таблицами

стилей и объектной моделью документа

Взаимодействие с пользователем при решении “локальных” задач, решаемых

приложением JavaScript, встроенном в HTML-страницу

Язык создания сценариев VBScript разработан фирмой Microsoft и является

подмножеством достаточно распространенного в среде программистов языка

Visual Basic разработки прикладных Windows-приложений. Как и его родитель,

язык VBScript достаточно прост и легок в изучении.

Преимуществом его применения для создания сценариев является возможность

использования, с небольшими корректировками, ранее написанных процедур на

языках Visual Basic и Visual Basic for Application.

Функциональные возможности сценариев, написанных на VBScript, ничем не

отличаются от возможностей сценариев JavaScript: динамическое создание

документа или его частей, перехват и обработка событий и т.д.

VBScript используется для написания сценариев клиента (в этом случае

браузер должен иметь встроенный интерпретатор этого языка), а также для

написания сценариев на сервере (в этом случае сервер должен поддерживать

язык VBScript). Для создания сценариев клиента используется набор объектов,

аналогичный набору объектов JavaScript. Объекты клиента и сервера

отличаются друг от друга, но существует общая часть (ядро) объектов,

используемых при разработке как сценариев клиента, так и сценариев сервера.

Типы данных

Как и любой другой язык программирования, JavaScript использует переменные

для хранения данных определенного типа. Реализация JavaScript является

примером языка свободного использования типов. В нем не обязательно

задавать тип переменной. Ее тип зависит от типа хранимых в ней данных,

причем при изменении типа данных меняется и тип переменной.

JavaScript поддерживает четыре простых типа данных:

Вещественный

Строковый

Булевый, или логический

Для присваивания переменным значений основных типов применяются литералы –

буквенные значения данных соответствующих типов.

Целые литералы являются последовательностью цифр и представляют обычные

целые числа со знаком или без знака:

123 // целое положительное число

123 // целое отрицательное число

123 // целое положительное число

Для задания вещественных литералов используется синтаксис чисел с

десятичной точкой, отделяющей дробную часть числа от целой, или запись

вещественных чисел в научной нотации с указанием после символа “e” или “E”

порядка числа. Пример правильных вещественных чисел:

1.25 0.125e01 12.5E-1 0.0125E+2

Строковый литерал – последовательность алфавитно-цифровых символов,

заключенная в одинарные (‘) или двойные кавычки (“), например: “Ира”,

‘ИРА’. При задании строковых переменных нельзя смешивать одинарные и

двойные кавычки. Недопустимо задавать строку, например, в виде “Ира’.

Двойные кавычки – это один самостоятельный символ, а не последовательность

двух символов одинарных кавычек. Если в строке нужно использовать символ

кавычек, то строковый литерал необходимо заключать в кавычки

противоположного вида:

“It’s a string” // Значение строки равно It’s a string

Булевы литералы имеют два значения: true и false, и используются для

обработки ситуаций да/нет в операторах сравнения.

В VBScript определен только один тип данных – Variant. Это универсальный

тип, в котором можно хранить информацию, предоставленную другими типами

данных, применяемыми в программировании, начиная от простейшего целого и

заканчивая объектами.

В своем простейшем использовании тип Variant содержит либо числовые данные,

либо символьные строки – типы данных, наиболее часто встречаемые при

написании сценария. Реально содержащиеся в вариантом типе данные могут быть

одного из типов, называемых подтипами типа Variant, представленных в

Таблица 1. Подтипы данных, хранящихся в типе Variant

|Подтип |Описание |Функция |

| | |преобразовани|

|Empty |Переменная не инициализирована | |

|Null |Переменная не содержит никаких допустимых | |

| |данных | |

|Error |Содержит номер ошибки | |

|Boolean |Содержит значения либо True, либо False |CBool |

|Byte |Содержит целые числа в диапазоне от 0 до 255 |CByte |

|Integer |Содержит целые числа в диапазоне от -32 768 до |CInt |

|Currency |Значения в диапазоне |CCur |

| |от -922 337 203 685 477.5808 до | |

| |922 337 203 685 477.5807 | |

|Long |Содержит целые числа в диапазоне |CLng |

| |от -2 147 483 648 до 2 147 483 647 | |

|Single |Содержит вещественные числа с плавающей точкой |CSng |

| |одинарной точности в диапазоне | |

| |от -3.402823E38 до -1.401298E-45 | |

| |и от 1.401298E-45 до 3.402823E38 | |

|Double |Содержит вещественные числа с плавающей точкой |CDbl |

| |удвоенной точности в диапазоне | |

| |от -1.79769313486232E308 до | |

| |-4.94065645841247E-324 | |

| |для отрицательных значений | |

| |и от 4.94065645841247E-324 до | |

| |1.79769313486232E308 | |

| |для положительных значений | |

|Date(Time)|Содержит число, которое представляет дату в |CDate |

| |9999 года | |

|String |Содержит строку переменной длины (до 2 |CStr |

| |миллионов символов) | |

Первые три подтипа, собственно говоря, не являются подтипами, а

представляют значения, которые может принимать вариантный тип.

Значение Empty имеет переменная, которая была объявлена в операторе Dim

(см. ниже), но ей еще не присваивали никакого значения. Это значение

считается равным 0 в математических операциях и равным пустой строке (“”) в

операциях со строковыми значениями.

Значение Null означает, что переменная не содержит данных. Его не следует

путать со значением Empty. Вариантная переменная может получить значение

Null в результате выполнения некоторых операций над ней. Это значение можно

присвоить переменной, тогда как значение Empty – нельзя.

Значение Error – это специальное значение, которое используется для

указания возникновения ошибки в процедуре.

Каждый подтип данных задается с помощью литералов. Числовые литералы

представляют собой целые числа, действительные числа с плавающей или

фиксированной точкой. Примеры числовых литералов приведены ниже:

23 ‘Целое число

23.78 ‘Действительное число с фиксированной точкой

237.8E-1 ‘Действительное число с плавающей точкой

Строковые литералы задаются в виде последовательности символов, заключенных

в двойные кавычки (“):

“Это строковый литерал”.

Литералы даты и времени заключаются между символами числовых знаков (#).

VBScript поддерживает большое число форматов даты и времени. Следующие

примеры показывают правильные литералы даты и времени, соответствующие дате

#10/6/99 10:20pm#

Внутренне литералы даты и времени представляются в виде действительных

чисел удвоенной точности. Целая часть представляет количество дней,

Булевы литералы True и False являются константами целого типа, принимающими

соответственно значения 1 и 0. Любое числовое значение, не равное нулю,

преобразуется функцией CBool в True, а нулевое значение (целое или

действительное) – в False.

Вариантный тип данных при использовании в выражениях в качестве операндов

разнообразных операторов языка обрабатывается в зависимости от подтипа

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

подтипы данных в них содержатся. Если хотя бы один из операндов содержит

число, то результат будет сумма значений двух переменных (содержимое

второго операнда преобразуется к числовому подтипу), если оба операнда

Вариативный тип данных предоставляет программисту более эффективный способ

обработки и хранения данных, не заботясь о типе хранимых данных. Если,

например, при вычислениях первоначально в переменной вариантного типа

хранилось значение типа Byte (число в диапазоне от 0 до 255), и в

результате выполнения некоторых действий это значение стало отрицательным,

то просто изменится представление этого числа в переменной (оно станет

Integer) и не возникает никакой ошибки. Правда, за это удобство приходится

платить используемой памятью: для вариантного типа данных вне зависимости

от хранимого подтипа нужно 16 байт памяти.

Иногда в некоторых вычислениях необходимо явно преобразовать содержащийся в

переменной подтип в другой. Для этого в VBScript имеется ряд функций

преобразования в соответствующие типы. В табл. 1 последний столбец содержит

имена функций преобразования в соответствующий подтип. Эти функции в

качестве параметра принимают литералы, переменные и выражения.

Переменные

Каждая переменная имеет имя, которое должно начинаться с буквы латинского

алфавита, либо символа подчеркивания “_”, за которым следует любая

комбинация алфавитно-цифровых символов или символов подчеркивания.

Следующие имена являются допустимыми именами переменных

Язык JavaScript чувствителен к регистру. Это означает, что строчные и

прописные буквы алфавита считаются разными символами.

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

Оператором var

Оператором присваивания (=)

Оператор var используется как для задания, так и для инициализации

переменной и имеет синтаксис:

var имя_переменной [= начальное_значение];

Необязательный оператор присваивания задает данные, которые содержит

переменная. Их тип определяет и тип переменной. Например, следующий

оператор

var weekDay = “Пятница”;

задает переменную weekDay, присваивает ей строковое значение “Пятница”, и

тем самым определяет ее тип как строковый.

Если при определении переменной ей не присвоено никакого значения, то ее

тип не определен. Ее тип будет определен только после того, как ей будет

присвоено некоторое значение оператором присваивания =.

Переменные используются для хранения данных приложения. Прежде чем

переменную можно будет использовать, ее необходимо объявить. Это можно

осуществить явным способом с помощью оператора Dim, или неявным – просто

использовать имя переменной в операторе присваивания. Синтаксис оператора

явного объявления переменной следующий:

Dim имя_переменной

Параметр имя_переменной – имя объявляемой переменной. Оно должно начинаться

с буквы, не содержать пробелов, точку (.), восклицательный знак (!), а

также символов (@), (&), ($), (#) и не превышать длину в 255 символов.

Язык VBScript не чувствителен к регистру. Это означает, что в нем не

различаются строчные и прописные буквы. Поэтому, например, и m, и M будут

ссылаться на одну и ту же переменную, если используются в качестве

идентификатора переменной.

Иногда в программе необходимо задавать переменные, значения которых нельзя

изменять. Такие переменные называются именованными константами. В VBScript

для задания констант существует оператор Const, имеющий следующий

синтаксис:

Const conName = “Дмитрий” ‘Строковая константа

Const conPi = 3.1416 ‘Числовая константа

Const conBirthDay = #1-8-53# ‘Константа даты

Операторы

Оператор присваивания рассматривается как выражение присваивания, которое

вычисляется равным выражению правой части, и в то же время он присваивает

вычисленное значение выражения переменной, заданное в левой части

оператора.

Арифметические выражения создаются арифметическими операторами (табл. 2).

Таблица 2. Арифметические операторы

|Оператор |Название |

|+ |Сложение |

|- |Вычитание |

|* |Умножение |

|/ |Деление |

|% |Остаток от деления целых чисел |

|++ |Увеличение значения переменной на единицу |

|-- |Уменьшение значения переменной на единицу |

Кроме простого оператора присваивания (=) существуют сокращенные формы

операторов присваивания, совмещенных с арифметическими операторами, в

которых производятся арифметические действия над левыми и правыми

операндами и результат присваивается переменной, заданной левым операндом.

Все они перечислены в табл. 3.

Таблица 3. Сокращенные операторы присваивания

|Оператор |Значение |

|X * = Y |X = X * Y |

|X / = Y |X = X / Y |

|X + = Y |X = X + Y |

|X - = Y |X = X – Y |

|X % = Y |X = X % Y |

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

логические операторы, применяемые к переменным любого типа.

Операторы сравнения аналогичны таковым в других языках программирования. Их

список представлен в табл. 4.

Таблица 4. Операторы сравнения

|Оператор |Название |

|== |Равно |

|!= |Не равно |

|>= |Больше или равно |

| |Строго больше |

При использовании этих операторов в выражении оно вычисляется равным true,

если соответствующее сравнение верно, в противном случае значение выражения

равно false.

Логические операторы представлены в табл. 5. В примерах предполагается, что

переменная var1 = ‘Кит’, var2 = ‘Кот’, var3 = false.

Таблица 5. Логические операторы

|Оператор |Синтаксис |Описание |Пример |

|&& (логическое |выраж1 && |Возвращает выраж1, если |var1 && var2 |

|И) |выраж2 |оно преобразуется или |(равно ‘Кот’)|

| | |равно false, иначе | |

| | |выраж2 |var2 && var3 |

| | | |(равно false)|

||| (логическое |выраж1 || |Возвращает выраж1, если |var1 || var2 |

|ИЛИ) |выраж2 |оно преобразуется или | |

| | |равно true, иначе выраж2|(равно ‘Кит’)|

| | | |var3 || var1 |

| | | |(равно ‘Кит’)|

| | | |var3 || false|

| | | |(равно false)|

|! (логическое |!выраж |Если выраж равно true, |!var1 |

|НЕ) | |возвращает false; если |(равно false)|

| | |выраж равно false, | |

| | |возвращает true |!var3 |

| | | |(равно true) |

Логические операторы и операторы сравнения используются в операторах цикла

и условия для проверки завершения цикла или выполнения определенной группы

операторов.

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

JavaScript, собственно говоря, существует только один строковый оператор –

оператор конкатенации (соединения) строк (+), если не считать сокращенной

формы оператора присваивания со сложением (+=). Этот оператор присоединяет

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

результат, равный соединению строк:

string = “Моя”+”строка”; // Значение переменной string равно “Моястрока”

Условный оператор является единственным оператором, использующим три

операнда. Его значением является один из двух операндов, определяемый из

условия истинности третьего. Его синтаксис таков:

(условие) ? знач1: знач2;

Если операнд условие имеет значение true, то результатом вычисления

оператор

range = (mark), меньше (), меньше или равно (=). Объекты сравниваются с помощью специального оператора Is.

В VBScript нет специального знака для операции присваивания. Один и тот же

знака равенства используется как для операции присваивания значения

переменной (см. выше), так и для операции сравнения на равенство. Смысл

операции, представляемой этим символом, зависит от контекста, в котором она

применена.

Существует ряд операторов, выполняющих действия над логическими (булевыми)

данными: отрицание (Not), конъюнкция (And), дизъюнкция (Or), исключающее

ИЛИ (Xor), эквивалентность (Eqv) и импликация (Imp).

Оператор (&) производит конкатенацию (соединение) двух строк. При его

выполнении данные, содержащиеся в операндах, преобразуются при

необходимости к строковому подтипу, и осуществляется сцепление двух строк.

Операторы управления

Весь набор управления языка можно разбить на три группы:

Операторы выбора, или условные

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

Операторы манипулирования с объектами

Операторы выбора

К этой группе операторов относятся операторы, которые выполняют

определенные блоки операторов в зависимости от истинности некоторого

булевского выражения. Этот оператор условия if…else и переключатель switch.

Оператор условия if применяется, если необходимо вычислить некоторый блок

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

синтаксис:

if (условие) {

операторы1

операторы2

Первая группа операторов операторы1 выполняется при условии истинности

выражения условие. Необязательный блок else задает группу операторов

операторы2, которая будет выполнена в случае ложности условия, заданного в

Внутри группы выполняемых операторов могут использоваться любые операторы

JavaScript, в том числе и операторы условия. Таким образом, можно создавать

группу вложенных операторов условия и реализовывать сложные алгоритмы

проверки.

В операторе switch вычисляется одно выражение и сравнивается со значениями,

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

соответствующего блока case. Синтаксис этого оператора следующий:

switch (выражение) {

case значение1:

[операторы1]

case значение2:

[операторы2]

[операторы]

Если значение выражения в блоке switch равно значение1, то выполняется

группа операторов операторы1, если равно значение2, то выполняется группа

операторов оператары2 и т.д. Если значение выражения не равняется ни одному

из значений, заданных в блоках case, то вычисляется группа операторов блока

default, если этот блок задан, иначе происходит выход из оператора switch.

Необязательный оператор break, задаваемый в каждом из блоков case,

выполняет безусловный выход из оператора switch. Если он не задан, то

продолжается выполнение операторов в следующих блоках case до первого

оператора break или до конца тела оператора switch.

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

Оператор цикла повторно выполняет последовательность операторов JavaScript,

определенных в его теле, пока не выполнится некоторое заданное условие. В

языке существует два оператора цикла: for и while. Они отличаются

механизмом организации цикла.

Оператор цикла for позволяет организовать выполнение блока операторов

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

которая изменяет свое значение во время выполнения цикла. Условие

завершения цикла зависит от значения этой переменной. Оператор имеет

следующий синтаксис:

for ([инициал_выражение];[условие];[изменяющее_выражение]) {

[операторы]

Параметром инициал_выражение задается и инициализируется переменная цикла.

Это выражение вычисляется один раз в начале выполнения цикла. После этого

проверяется истинность выражения условие. Если оно истинно, то выполняется

блок операторов тела цикла, ограниченного фигурными скобками; вычисляется

изменяющее_выражение, содержащее переменную цикла, и снова проверяется

истинность выражения условие. Если оно истинно, то повторяется цикл

вычислений, если нет, то оператор цикла завершает свое выполнение.

Цикл while выполняется пока истинно выражение, задающее условие выполнения

цикла. Его синтаксис следующий:

while (условие) {

[операторы]

Сначала проверяется истинность условия, заданного в заголовке цикла, а

затем выполняются (или не выполняются) операторы тела цикла. Проверка

истинности условия осуществляется на каждом шаге цикла. Использование этого

цикла предполагает, что условное выражение окончания цикла меняется в

зависимости от вычисленных значений переменных и выражений в теле цикла.

Иногда необходимо завершить цикл не по условию, задаваемому в заголовке

цикла, а в результате вычисления некоторого условия в теле цикла. Для этой

цели в JavaScript существуют операторы break и continue.

Оператор break завершает выполнение цикла и передает управление оператору,

непосредственно следующим за оператором цикла. Оператор continue прекращает

выполнение текущей итерации и начинает выполнение следующей, т.е. в цикле

while он передает управление на проверку выражения условие цикла, а в цикле

for – на вычисление выражения изменяющее_выражение.

Манипулирование объектами

Четыре оператора JavaScript предназначены для работы с объектами. Это

оператор new, создающий новый объект, операторы for…in и with и ключевое

слово this.

Оператор for…in позволяет организовать цикл по свойствам объекта

JavaScript. Синтаксис его следующий:

for (переменная_цикла in объект) {

[операторы]

Этот цикл производит перебор свойств объекта. В переменной цикла на каждой

итерации сохраняется значение свойства объекта. Количество итераций равно

количеству свойств, существующих у заданного в заголовке цикла объекта.

Оператор with задает объект по умолчанию для блока операторов, определенных

в его теле. Это означает, что все встречаемые в операторах этого блока

свойства и методы, являются свойствами и методами указанного объекта.

Применение данного оператора избавляет от необходимости указывать иерархию

принадлежности объекта и сокращает исходный текст программы.

Операторы сценария выполняются последовательно в том порядке, как они

записаны. Изменить порядок выполнения операторов в VBScript можно

операторами условия и цикла.

Операторы условия

Операторы принятия решения (условные операторы) выполняют определенные

блоки операторов в зависимости от результатов проверки некоторого выражения

или выражений. VBScript поддерживает следующие конструкции операторов

принятия решения:

If…then…else

Конструкция if…then применяется, когда необходимо выполнить группу

операторов или один оператор в зависимости от значения выражения,

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

Ее первая форма

if условие then оператор

позволяет вычислить указанный оператор, если истинно заданное условие.

Вторая форма этой конструкции позволяет вычислить группу операторов,

заданных в нескольких строках кода, и имеет следующий синтаксис:

if условие then

операторы

Наиболее общий синтаксис конструкции if…then…else следующий:

if условие1 then

[группа-операторов-1]

[группа-операторов-n]]

Сначала проверяется условие1. Если оно ложно, то проверяется условие2. Если

и оно ложно, то проверяется следующее условие из группы elseIf до тех пор,

пока не будет найдено истинное условие, операторы которого и выполняются.

После чего управление передается оператору, непосредственно следующему за

оператором end if.

Если не найдено ни одно истинное условие, то выполняется группа операторов

из блока else, если он присутствует в конструкции. В противном случае

управление передается оператору, следующему за оператором end if.

Блоков elseIf в конструкции if…then…else может быть сколько угодно, тогда

как блок else всегда один, если он задан.

Если в предыдущей конструкции принятия решения проверяется равенство одного

выражения разным условиям, она становится не достаточно эффективной как с

точки зрения ее выполнения, так и сточки зрения легкости восприятия текста.

В этом случае следует использовать конструкцию select case:

select case тестируемое_выражение

[группа-операторов-n]]

Вычисляется единственное выражение тестируемое_выражение и последовательно

сравнивается со значениями из списка значений блоков case. Если значение

выражения совпадает со значением, заданным в списке какого-либо блока case,

то выполняется группа операторов данного блока, и после этого управление

передается оператору, непосредственно следующему за оператором end select.

Если не найдено ни одного соответствия значения тестируемого выражения со

значениями из списков значений, то выполняется группа операторов блока case

else (в случае его наличия).

Список значений блока case может состоять из одного или нескольких

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

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

Для повторного выполнения несколько раз группы операторов VBScript, как и

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

операторов цикла:

For each…next

Конструкция do…loop применяется для выполнения группы операторов, пока

некоторое выражение ложно или истинно. Она имеет несколько разновидностей,

отличающихся моментом проверки условия завершения цикла (до начала

выполнения группы операторов или после) и тем, истинно или ложно это

Цикл do while выполняется до тех пор, пока истинно условие окончания цикла:

do while условие_окончания

группа-операторов

Перед выполнением операторов цикла проверяется, истинно ли выражение

условие_окончания. Если оно истинно, то выполняется группа-операторов (в

ней изменяются значения переменных, входящих в выражение

условие_окончания). После этого снова проверяется условие окончания цикла

и, в случае его истинности, выполняется группа операторов тела цикла.

Процедура выполняется до тех пор, пока выражение условие_окончания не

станет ложным.

Цикл do while не будет выполнен ни разу, если при первой проверке

условие_окончания ложно.

Другая разновидность цикла do while сначала выполняет группу операторов, а

потом проверяет условие окончания цикла:

группа-операторов

loop while условие_окончания

Этот цикл обязательно выполнит один раз группу операторов, определенных в

теле цикла.

Цикл do until аналогичен первой разновидности цикла do while, за

исключением того, что он выполняется, пока значение выражения

условие_окончания ложно:

do until условие_окончания

группа-операторов

Этот цикл также может не выполниться ни одного раза, если при первой же

проверке условия завершения цикла, оно оказывается истинным.

Во второй разновидности цикла do until условие окончания завершения цикла

проверяется после выполнения группы операторов, и, таким образом, он

обязательно выполнится хотя бы один раз:

группа-операторов

loop until условие_окончания

В циклах do…loop заранее не известно количество итераций повторения группы

операторов, но иногда требуется выполнить точно заданное число повторений

цикла. Такую возможность предоставляет цикл for…next.

В этом цикле задается переменная, называемая счетчиком цикла, которая

увеличивается (или уменьшается) на заданную величину после выполнения

группы операторов. Цикл завершает свои итерации, когда значение счетчика

превысит (или станет меньше) заданной величины. Синтаксис такой конструкции

цикла следующий:

for счетчик = нач_значение to кон_значение

операторы

В начале выполнения этого цикла переменной счетчик присваивается значение,

заданное параметром нач_значение. Выполняются операторы цикла, и значение

переменной цикла увеличивается или уменьшается (в зависимости от знака) на

величину приращение. Осуществляется проверка, не превысило ли (или не стало

меньше) новое значение счетчика значение параметра кон_значение. Если нет,

то итерации повторяются, если да, то цикл завершает свое выполнение.

Параметр приращение цикла for…next является необязательным. Если он не

задан, то по умолчанию переменная цикла увеличивается на 1.

Конструкция for each…next позволяет организовать цикл по элементам массива

или по объектам некоторого набора (семейства) объектов, не зная заранее

число элементов в массиве или число объектов в наборе. Синтаксис этой

конструкции следующий:

for each элемент in группа

операторы

Параметр группа задает имя массива или имя набора объектов. Переменная

элемент на каждом шаге цикла будет содержать ссылку на элемент массива или

объект набора. Цикл завершает свое выполнение, как только завершится

последовательный перебор всех элементов массива или объектов набора.

Процедуры

Процедура, или функция, – это именованная последовательность операторов,

которая инициализируется и выполняется простой ссылкой на имя функции.

Процедура задается оператором function, имеющим следующий синтаксис:

function имя_функции ([параметры] {

[операторы]

где имя_функции – любое правильное имя языка JavaScript, параметры – список

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

Оператор function только определяет процедуру, но не выполняет ее. Для

вызова процедуры достаточно указать ее имя с заданными в скобках

параметрами.

Если в процедуре параметры отсутствуют, наличие скобок без параметров в

операторе вызова процедуры обязательно.

Процедура может возвращать некоторое вычисляемое в ней значение. В этом

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

последовательность выполняемых ею действий, обязательно должен

присутствовать оператор return, задающий возвращаемое функцией значение.

Вызов функции осуществляется аналогично вызову процедуры, но ее можно

использовать в выражениях JavaScript.

Обычно все определения процедур и функции задаются в разделе

документа. Это обеспечивает интерпретацию и сохранение в памяти всех

процедур при загрузке документа в браузер.

VBScript предусматривает создание двух типов процедур:

Процедура sub

Процедура function (или функция)

Процедура sub выполняет последовательность действий, но не возвращает

никакого, значения, ассоциированного с ее именем. Она имеет следующий

синтаксис:

sub имя_процедуры ([список-параметров])

операторы

Через необязательный параметр можно передать в процедуру внешние данные

или, наоборот, получить некоторые вычисленные ею значения.

Вызов процедуры sub осуществляется оператором call, после которого

указывается имя процедуры и в круглых скобках параметры. Процедуру можно

вызвать и простым указанием ее имени, но в этом случае передаваемые ей

параметры задаются без скобок. Следующие два способа вызова процедуры

эквивалентны:

call MyProc(firstarg, secondarg)

MyProc firstarg, secondarg

Функция также выполняет определенную последовательность операторов и ей

можно передать внешние данные через параметры процедуры, но, в отличие от

процедуры sub, она возвращает значение, присваиваемое ее имени, и может

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

function имя_процедуры ([список-параметров])

операторы

имя_процедуры = значение

В операторах процедуры обязательно должен присутствовать оператор

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

VBScript предоставляет два способа передачи параметров в процедуру:

По значению

фактический адрес переменной, используемой в качестве параметра. Это

позволяет изменить содержимое соответствующего адреса памяти, а тем самым,

и значение переменной.

Передача параметров по значению предполагает передачу в процедуру копии

переменной, а не адреса самой переменной. Поэтому любые изменения параметра

внутри процедуры воздействуют на копию, а не на саму переменную, и,

следовательно, значение переменной, переданной в качестве параметра,

изменяться не будет. Для указания интерпретатору, что параметр передается в

процедуру по значению, используется ключевое слово ByVal, задаваемое перед

параметром в описании процедуры.

На самом верхнем уровне иерархии находится объект window, представляющий

окно браузера и являющийся “родителем” всех остальных объектов.

Расположенные ниже в иерархии объекты могут иметь свои подчиненные объекты.

На рис. 1 показана структура объектов клиента (браузера).

Рис. 1. Иерархия объектов JavaScript на стороне клиента

Особняком стоит объект navigator с двумя дочерними (подчиненными)

объектами. Он относится к самому браузеру, и его свойства позволяют

определить характеристики программы просмотра.

Каждая страница в добавление к объекту navigator обязательно имеет еще

четыре объекта:

Window – объект верхнего уровня, свойства которого применяются ко всему

окну, в котором отображается документ.

Document – свойства которого определяются содержимым самого документа:

связи, цвет фона, формы и т.д.

Location – свойства которого связаны с URL-адресом отображаемого

документа.

History – представляет адреса ранее загружавшихся HTML-страниц.

Кроме указанных объектов страница может иметь дополнительные объекты,

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

document. Если на страницы расположена форма, то все ее элементы являются

дочерними объектами этой формы. Для задания точного имени объекта

используется точечная нотация с полным указанием всей цепочки наследования

объекта. Это возможно, так как объект верхнего уровня имеет свойство,

значением которого является объект нижнего уровня. Ссылка на объект

осуществляется по имени, заданному параметром NAME тэга HTML.

Для получения фамилии студента, введенного в первом поле ввода, в программе

чтобы определить курс, на котором обучается студент, необходимо

Во главе иерархии, как и в случае с Netscape Navigator, стоит объект

window, представляющий окно браузера и порождающий все остальные объекты

указывать “родительский” объект window.

Модель охватывает практически все элементы HTML-страницы. На рис. 2

показана иерархическая структура объектной модели, которая отражает

подчиненность элементов страницы.

Рис. 2. Объектная модель MS Internet Explorer

Для каждого типа элементов в модели предусмотрены соответствующие наборы.

Например, для объектов image, определяемых тэгами , существует набор

имени объекта, задаваемого значением параметра NAME, или с помощью набора

объектов, в данном случае images. В наборе объекты расположены в

последовательности, в которой они задаются на HTML-странице.

Список литературы

1. Матросов А.В., Сергеев А.О, Чаунин М.П. HTML 4.0. – СПб.: БХВ-

Петербург, 2000.

2. Кенин А.М., Печенкина Н.С. Новый уровень создания HTML-документов. –

Екатеринбург: Деловая книга, 1996.

3. Дэвис С. Языки JavaScript и VBScript. – К.: Диалектика, 1996.

4. Микляев А. Основы HTML. – М.: Солон, 1998.

5. Зубкова С.В. Интерактивные Web-документы. – М.: ДМК Пресс, 2000.

6. Ратбон Э. JavaScript для чайников. – К.: Диалектика, 1995.

7. Ставровский А.Б. Учебник по VBScript. – K.: BHV, 2000.

Типы данных

В языке 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 и объявлять переменные.

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

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

Область видимости и время жизни

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

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

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

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

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

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 предоставляет нам следующие логические операторы:

  1. Логическое исключение (Xor);
  2. Логический эквивалент (Eqv);
  3. Логическая импликация (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

Оператор присваивания

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

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

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

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

  1. Возведение в степень (^);
  2. Смена знака числа, унарный минус (-);
  3. Умножение (*) и деление (/);
  4. Целочисленное деление (\);
  5. Остаток от целочисленного деления (Mod);
  6. Сложение (+) и вычитание (-);
  7. Слияние строк (&).

Если умножение и деление встречаются в одном выражении, то операции выполняются в порядке следования слева-направо. Аналогичное правило действует в случае одновременного присутствия операторов сложения и вычитания.

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

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

  1. Логическое отрицание, инверсия (Not);
  2. Логическое умножение, коньюнкция (And);
  3. Логическое сложение, дизьюнкция (Or);
  4. Логическое исключение (Xor);
  5. Логический эквивалент (Eqv);
  6. Логическая импликация (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 <= end, при step >= 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

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

sub имя_процедуры ([список-параметров])

операторы

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

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

call MyProc(firstarg, secondarg)

MyProc firstarg, secondarg

Функция также выполняет определенную последовательность операторов и ей можно передать внешние данные через параметры процедуры, но, в отличие от процедуры sub, она возвращает значение, присваиваемое ее имени, и может быть использована в выражениях VBScript. Она имеет следующий синтаксис:

function имя_процедуры ([список-параметров])

операторы

имя_процедуры = значение

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

VBScript предоставляет два способа передачи параметров в процедуру:

    По значению

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

Передача параметров по значению предполагает передачу в процедуру копии переменной, а не адреса самой переменной. Поэтому любые изменения параметра внутри процедуры воздействуют на копию, а не на саму переменную, и, следовательно, значение переменной, переданной в качестве параметра, изменяться не будет. Для указания интерпретатору, что параметр передается в процедуру по значению, используется ключевое слово ByVal, задаваемое перед параметром в описании процедуры.

6 Объекты

6.1 JavaScript

На самом верхнем уровне иерархии находится объект window, представляющий окно браузера и являющийся “родителем” всех остальных объектов. Расположенные ниже в иерархии объекты могут иметь свои подчиненные объекты.

Особняком стоит объект navigator с двумя дочерними (подчиненными) объектами. Он относится к самому браузеру, и его свойства позволяют определить характеристики программы просмотра.

Каждая страница в добавление к объекту navigator обязательно имеет еще четыре объекта:

    window – объект верхнего уровня, свойства которого применяются ко всему окну, в котором отображается документ.

    document – свойства которого определяются содержимым самого документа: связи, цвет фона, формы и т.д.

    location – свойства которого связаны с URL-адресом отображаемого документа.

    history – представляет адреса ранее загружавшихся HTML-страниц.

Кроме указанных объектов страница может иметь дополнительные объекты, зависящие от ее содержимого, которые являются дочерними объектами объекта document. Если на страницы расположена форма, то все ее элементы являются дочерними объектами этой формы. Для задания точного имени объекта используется точечная нотация с полным указанием всей цепочки наследования объекта. Это возможно, так как объект верхнего уровня имеет свойство, значением которого является объект нижнего уровня. Ссылка на объект осуществляется по имени, заданному параметром NAME тэга HTML.

Фамилия:

Курс:

Для получения фамилии студента, введенного в первом поле ввода, в программе JavaScript следует использовать ссылку document.form1.studentName.value, а чтобы определить курс, на котором обучается студент, необходимо использовать ссылку document.form1.course.value.


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 | Функции | Коды ошибок выполнения На главную |




Top