- •Переменные, массивы и константы
- •Примечание
- •Примечание
- •Операторы условия и цикла
- •Примечание
- •Примечание
- •Примечание
- •Примечание
- •Примечание
- •Примечание
- •Процедуры
- •VbScript предусматривает создание двух типов процедур:
- •Объектная модель и взаимодействие с элементами документа
- •Функции и объекты ядра vbScript
- •InputBox(подсказка, заголовок, умалч_знач, х, у)
- •Примечание
- •Примечание
- •Примечание
- •Примечание
Процедуры
Часто приходится выполнять одну и ту же последовательность операторов, реализующих какое-нибудь действие в программе, возможно с разными переменными или разными значениями. Например, отображение подсказки пользователю в диалоговом окне можно рассматривать как одну и ту же последовательность действий (отобразить на экране диалоговое окно) с разными значениями (содержание подсказки). Такая последовательность действий обычно оформляется в виде процедуры (с параметрами или без параметров), инициализация выполнения которой осуществляется простым указанием имени этой процедуры и передаче ей необходимых параметров.
VbScript предусматривает создание двух типов процедур:
Процедура sub
Процедура Function (или функция)
Процедура sub выполняет последовательность действий, но не возвращает никакого значения, ассоциированного с ее именем. Она имеет следующий синтаксис:
Sub имя_процедуры ([список-параметров])
операторы
End Sub
Через необязательный список параметров можно передать в процедуру внешние данные или, наоборот, получить некоторые вычисленные ею значения.
Вызов процедуры sub осуществляется оператором call, после которого указывается имя процедуры и в круглых скобках параметры. Процедуру можно вызвать и простым указанием ее имени, но в этом случае передаваемые ей параметры задаются без скобок. Следующие два способа вызова процедуры эквивалентны:
Call MyProc(firstarg, secondarg)
MyProc firstarg, secondarg
Функция также выполняет определенную последовательность операторов и ей можно передать внешние данные через параметры функции, но, в отличие от процедуры Sub, она возвращает значение, присваиваемое ее имени, и может быть использована в выражениях VBScript. Она имеет следующий синтаксис:
Function имя__функции ( [список-параметров] )
операторы
имя_функции = значение
End Function
В операторах функции обязательно должен присутствовать оператор присвоения имени функции некоторого значения. Следующая функция пересчитывает переданное ей в качестве параметра значение в дюймы или сантиметры; второй параметр этой функции определяет, в каких единицах измерения задано исходное значение параметра.
Function InchMeter( value, index)
Select Case index
Case 0 ' Задано значение в сантиметрах
InchMeter = value / 2.54
Case 1 ' Задано значение в дюймах
InchMeter = value * 2.54
Case Else
InchMeter = -1
MsgBox "InchMeter: неправильный параметр index"
End Select
End Function
...
leng = InchMeter(1.5,0)
...
В этом фрагменте кода функция InchMeter вызывается в правой части оператора присваивания. Вызов функции в выражениях осуществляется указанием ее имени и списком параметров в круглых скобках. Функции Function можно вызывать, используя синтаксис вызова процедур sub, но в этом случае VBScript игнорирует возвращаемое ею значение. Следующие два оператора вызывают одну и ту же процедуру InchMeter (), но возвращаемые значения не доступны для дальнейшего использования:
Call InchMeter(1,0)
InchMeter 1,1
VBScript предоставляет два способа передачи параметров в процедуры:
По ссылке
По значению
Способ передачи параметра по ссылке, применяемый по умолчанию, передает фактический адрес переменной, используемой в качестве параметра. Это позволяет изменить содержимое соответствующего адреса памяти, а тем самым, и значение переменной.
Передача параметров по значению предполагает передачу в процедуру копии переменной, а не адреса самой переменной. Поэтому любые изменения параметра внутри процедуры воздействуют на копию, а не на саму переменную, и, следовательно, значение переменной, переданной в качестве параметра, изменяться не будет. Для указания интерпретатору, что параметр передается в процедуру по значению, используется ключевое слово ByVal, задаваемое перед параметром в описании процедуры. При вызове следующей процедуры значение переменной i, переданной в качестве параметра, не изменяется, хотя процедура изменяет значение параметра:
Sub proc(ByVal m)
m = 3
End Sub
i = 4
proc i
Document.write i // Напечатает 4, а не 3
Надо отметить, что процедуры и функции допускают рекурсию, как прямую так и косвенную.
