Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Yazyk_VBScript.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
150 Кб
Скачать
☆

Процедуры

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

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

Надо отметить, что процедуры и функции допускают рекурсию, как прямую так и косвенную.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]