Сделай Сам Свою Работу на 5

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





Основные понятия

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

Типы данных

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

В своем простейшем использовании тип variant содержит либо числовые данные, либо символьные строки — типы данных, наиболее часто встречаемые при написании сценария. Реально содержащиеся в вариантном типе данные могут быть одного из типов, называемых подтипами типа variant, представленных в табл. 9.10. Собственно говоря, эти подтипы охватывают все возможные типы данных, которые используются в языках Visual Basic и Visual Basic for Application.

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

Подтип Описание Функция преобразования
Empty Переменная не инициализирована  
Null Переменная не содержит никаких допустимых данных  
Error Содержит номер ошибки  
Boolean Содержит значения либо True, либо False СВооl
Byte Содержит целые числа в диапазоне от 0 до 255 CByte
Integer Содержит целые числа в диапазоне от -32 768 до 32 767 CInt
Currency Значения в диапазоне от -922 337 203 685 477.5808 до 922 337 203 685 477.5807 CCur
Long Содержит целые числа в диапазоне от -2 147 483 648 до 2 147 483 647 CLng
Single Содержит вещественные числа с плавающей точкой одинарной точности в диапазоне от -3.402823Е38 до -1 .401 298Е-45 для отрицательных значений и от 1 .401298Е-45 до 3.402823Е38 для положительных значений CSng
Double Содержит вещественные числа с плавающей точкой удвоенной точности в диапазоне от -1.7976931 3486232Е308 до -4.94065645841 247Е-324 для отрицательных значений и от 4.94065645841 247Е-324 до 1. 7976931 3486232Е308 для положительных значений CDbl
Date (Time) Содержит число, которое представляет дату в диапазоне от 1 января 100 года до 31 декабря 9999 года CDate
String Содержит строку переменной длины (до 2 миллионов символов) CStr
Object Содержит ссылку на объект  

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



Значение Empty имеет переменная, которая была объявлена в операторе Dim (см. ниже), но ей еще не присваивали никакого значения. Это значение считается равным 0 в математических операциях и равным пустой строке ("") в операциях со строковыми значениями.



Значение Null означает, что переменная не содержит данных. Его не следует путать со значением Empty. Вариантная переменная может получить значение Null в результате выполнения некоторых операций над ней. Это значение можно присвоить переменной, тогда как значение Empty — нельзя.

Значение Error — это специальное значение, которое используется для указания возникновения ошибки в процедуре.

Каждый подтип данных задается с помощью литералов (символьных констант). Числовые литералы представляют собой целые числа, действительные числа с плавающей или фиксированной точкой. Примеры числовых литералов приведены ниже:

' Целое число
-23.78 ' Действительное число с фиксированной точкой
-237.8Е-1 ' Действительное число с плавающей точкой

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

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

Литералы даты и времени заключаются между символами числовых знаков (#). VBScript поддерживает большое число форматов даты и времени. Следующие примеры показывают правильные литералы даты и времени, соответствующие дате 10 июня 1999 года:

#10-6-99 22:20#

#10/6/99#

#10/6/99 10:20pm#

Внутренне литералы даты и времени представляются в виде действительных чисел удвоенной точности. Целая часть представляет количество дней, прошедших от даты 30 декабря 1899 года, а дробная часть — время суток.



Булевы литералы True и False являются константами целого типа, принимающими соответственно значения 1 и 0. Любое числовое значение, не равное нулю, преобразуется функцией CBool в True, а нулевое значение (целое или действительное) — в False.

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

Вариантный тип данных предоставляет программисту более эффективный способ обработки и хранения данных, не заботясь о типе хранимых данных. Если, например, при вычислениях первоначально в переменной вариантного типа хранилось значение типа Byte (число в диапазоне от 0 до 255), и в результате выполнения некоторых действий это значение стало отрицательным, то просто изменится представление этого числа в переменной (оно станет типа integer) и не возникнет никакой ошибки. Правда, за это удобство приходится платить используемой памятью: для вариантного типа данных вне зависимости от хранимого подтипа нужно 16 байт памяти.

Иногда в некоторых вычислениях необходимо явно преобразовать содержащийся в переменной подтип в другой. Для этого в VBScript имеется ряд функций преобразования в соответствующие типы. В табл. 9.10 последний столбец содержит имена функций преобразования в соответствующий подтип. Эти функции в качестве параметра принимают литералы, переменные и выражения.

Переменные, массивы и константы

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

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

Параметр имя_переменной — имя объявляемой переменной. Оно должно начинаться с буквы, не содержать пробелов, точку (.), восклицательный знак (О, а также символов (@), (&), ($), (#) и не превышать длину в 255 символов.

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

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

Так как в VBScript определен только один тип данных variant, то и все, используемые в приложении переменные, также имеют тип variant.

Примечание

Вместо оператора Dim можно использовать операторы Private и Public для объявления переменной. Эти операторы, наследуемые VBScript от Visual Basic и задающие там локальные и открытые переменные соответственно, в VBScript выполняют функции, аналогичные оператору Dim.

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

  • Статические массивы
  • Динамические массивы

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

Dim имя_массива([индексы])

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

Dim M(9)

задает массив, состоящий из 10 элементов: первый элемент— м(0), второй — М(1) и т. д.

Если параметр индексы задан в виде последовательности целых чисел, разделенных запятыми, то оператор Dim задает многомерный массив. Количество чисел в списке определяет число размерностей массива, а значение каждого индекса равно количеству элементов массива, соответствующих этой размерности, минус единица. Следующий оператор задает двумерный массив, или таблицу из 10 строк и 4 столбцов:

Dim В (9,3)

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

B(1,2)

Число размерностей можно задавать до 60, хотя следует учитывать, что с увеличением числа размерностей катастрофически увеличивается требуемое количество памяти для размещения массива.

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

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

Dim Array()

...

ReDim Array(3)

...

В этом фрагменте оператор Dim задает динамический массив Array, а в операторе ReDim назначается его размерность.

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

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

Dim Array()

...

ReDim Array(3)

...

ReDim Preserve Array(Ubound(Array)+1)

...

В этом фрагменте используется функция ubound для определения верхней границы изменения индекса массива Array, затем его протяженность увеличивается на единицу с сохранением предыдущих значений элементов.

Примечание

Для многомерных массивов можно изменять протяженность только последней размерности массива. Любая попытка изменения протяженности не последней размерности приведет к ошибке интерпретатора.

Можно выполнить освобождение памяти, занятой динамическим массивом с помощью оператора Erase Имя_Динамического_Массива. Массив будет уничтожен как структура, занимающая память.

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

Const имя_константы = значение

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

Const conName = "Александр" ' Строковая константа
Const conPi = 3.1416 ' Числовая константа
Const conBirthDay = #1-8-53# ' Константа даты

 

Совет

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

Операторы

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

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

Если оператор достаточно длинный, или из соображений удобства чтения исходного текста необходимо расположить его в нескольких строках, то следует использовать символы продолжения — пробел со знаком подчеркивания (_).

Комментарии в языке VBScript вводятся в текст программы одинарной кавычкой ('). Любой текст, расположенный в строке за одинарной кавычкой, трактуется интерпретатором как комментарий, и, естественно, не обрабатывается им.

Большую группу представляют арифметические операторы, выполняющие основные арифметические действия над числовыми данными: возведение в степень (^), умножение (*), деление (/), целочисленное деление (\), сложение (+) и вычитание (-). Они подчиняются принятым в математике правилам старшинства операций: сначала выполняется возведение в степень, затем умножение или деление, далее сложение или вычитание. Скобки изменяют последовательность вычисления операций.

Примечание

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

Предупреждение

Оператор сложения (+), примененный к операндам, содержащим строковые данные, выполняет операцию конкатенации строк, а не сложение преобразованного в числовые данные содержимого обоих операндов. Для выполнения операции конкатенации в VBScript существует специальный оператор (&), которым и следует пользоваться для соединения строковых данных.

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

Примечание

В VBScript нет специального знака для операции присваивания. Один и тот же знак равенства используется как для операции присваивания значения переменной (см. выше), так и для операции сравнения на равенство. Смысл операции, представляемой этим символом, зависит от контекста, в котором она применена.

Существует ряд операторов, выполняющих действия над логическими (булевыми) данными: отрицание (Not), конъюнкция (And), дизъюнкция (or), исключающее ИЛИ (хог), эквивалентность (Eqv) и импликация (imp). Эти операции используются в операторах условия для вычисления выражений, истинность (или ложность) которых позволяет изменить поток выполнения операторов языка.

Оператор (&) производит конкатенацию (соединение) двух строк. При его выполнении данные, содержащиеся в операндах, преобразуются при необходимости к строковому подтипу, и осуществляется сцепление двух строк.

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

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

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

  • If...Then
  • If...Then...Else
  • Select Case

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

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

If условие Then оператор

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

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

If условие Then

операторы

End If

Примечание

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

Наиболее общий синтаксис конструкции if...Then...Else следующий:

If условие1 Then

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

[Elself условие2 Then

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

[Else

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

End If

Сначала проверяется условие1. Если оно ложно, то проверяется условие2. Если и оно ложно, то проверяется следующее условие из группы Elself до тех пор, пока не будет найдено истинное условие, операторы которого и выполняются. После чего управление передается оператору, непосредственно следующему за оператором End if.

Если не найдено ни одно истинное условие, то выполняется группа операторов из блока Else, если он присутствует в конструкции. В противном случае управление передается оператору, следующему за оператором End if.

Примечание

Блоков Elself в конструкции if. . .Then. . .Else может быть сколько угодно, тогда как блок Else всегда один, если он задан.

Если в предыдущей конструкции принятия решения проверяется равенство одного выражения разным значениям, она становится не достаточно эффективной как с точки зрения ее выполнения, так и с точки зрения легкости восприятия текста. В этом случае следует использовать конструкцию select

Case:

Select Case тестируемое_выражение

[Case список_значений1

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

[Case список_значений2

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

.

.

.

[Case Else

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

End Select

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

Если не найдено ни одного соответствия значения тестируемого выражения со значениями из списков значений, то выполняется группа операторов блока case Else (в случае его наличия).

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

Примечание

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

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

  • Do... Loop
  • For...Next
  • For Each...Next

Конструкция Do...Loop применяется для выполнения группы операторов, пока некоторое выражение ложно или истинно. Она имеет несколько разновидностей, отличающихся моментом проверки условия завершения цикла (до начала выполнения группы операторов или после) и тем, истинно или ложно это условие.

Цикл Do While выполняется до тех пор, пока истинно условие продолжения цикла:

Do While условие_продолжения

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

Loop

Перед выполнением операторов цикла проверяется, истинно ли выражение условие_продолжения. Если оно истинно, то выполняется группа-операторов (в ней изменяются значения переменных, входящих в выражение условие_продолжения). После этого снова проверяется условие продолжения цикла и, в случае его истинности, выполняется группа операторов тела цикла. Процедура повторяется до тех пор, пока выражение условие_продолжения не станет ложным.

Примечание

Если выражение, определяющее условие продолжения цикла и первоначально имеющее значение True, не изменяется в теле цикла, то цикл будет повторяться бесконечное число раз. Для выхода из бесконечного цикла следует использовать оператор Exit Do (см. ниже).

Цикл Do While не будет выполнен ни разу, если при первой проверке условие_продолжения ложно.

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

Do

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

Loop While условие_продолжения

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

Цикл Do Until аналогичен первой разновидности цикла Do While, за исключением того, что он выполняется, пока значение выражения

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

Do Until условие_окончания

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

Loop

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

Во второй разновидности цикла Do Until условие окончания завершения цикла проверяется после выполнения группы операторов, и, таким образом, он обязательно выполнится хотя бы один раз:

Do

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

Loop Until условие окончания

Примечание

Выражение условие_окончания не обязательно должно быть выражением сравнения, принимающим значение истина или Ложь. Значение любого вычисляемого выражения трактуется как Ложь, если оно равно нулю, и Истина — в противном случае.

В циклах Do...Loop заранее не известно количество итераций повторения группы операторов, но иногда требуется выполнить точно заданное число повторений цикла. Такую возможность предоставляет цикл For...Next.

В этом цикле задается переменная, называемая счетчиком цикла, которая увеличивается (или уменьшается) на заданную величину после выполнения группы операторов. Цикл завершает свои итерации, когда значение счетчика превысит (или станет меньше) заданной величины. Синтаксис такой конструкции цикла следующий:

For счетчик = нач_значение Tо кон_значение [Step приращение]

операторы

Next

В начале выполнения этого цикла переменной счетчик присваивается значение, заданное параметром нач_значение. Выполняются операторы цикла, и значение переменной цикла увеличивается или уменьшается (в зависимости от знака) на величину приращение. Осуществляется проверка, не превысило ли (или не стало меньше) новое значение счетчика значение параметра кон_значение. Если нет, то итерации повторяются, если да, то цикл завершает свое выполнение.

Параметр приращение цикла For...Next является необязательным. Если он не задан, то по умолчанию переменная цикла увеличивается на 1.

Примечание

Следует аккуратно задавать все три параметра цикла For...Next. Они должны быть согласованы: если приращение положительно, то начальное значение должно быть меньше или равно конечному значению; если приращение отрицательно, то конечное значение должно быть меньше или равно начальному значению. Если это не так, то цикл For...Next не выполняется ни одного раза.

Конструкция For Each...Next позволяет организовать цикл по элементам массива или по объектам некоторого набора (семейства) объектов (см. ниже в разделе), не зная заранее число элементов в массиве или число объектов в наборе. Синтаксис этой конструкции следующий:

For Each элемент In группа

операторы

Next

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

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

Dim Ar(10)

...

Number = 0

For Each j In Ar

Number = Number + 1

Next

Document.Write "Число элементов массива равно " & Number

Результатом работы данного сценария будет строка в документе:

Чиcло элементов массива равно 11

Однако как ввести объект Document в программу?

В следующем примере используется набор forms для организации цикла по числу форм в документе. Внутренний цикл по элементам набора elements формы печатает в документ значения свойства value всех элементов формы.

Пример 9.4. Отображение всех элементов форм документа

<BODY>

<FORM name="frm1">

<INPUT TYPE="checkbox" NAME="check1" value="Флажок"> Флажок

</FORM>

<FORM name="frm2">

<INPUT TYPE="checkbox" NAME="check2" value="Флажок1"> Флажок1

</FORM>

<P>

<SCRIPT language="VBScript">

For Each i In Document.forms

Document.write "<p> Форма " & i.name & ":"

For Each j In i.elements

Document.write "<p> Элемент: " & j.value

Next

Document.write "<HR>"

Next

</SCRIPT>

</BODY>

На каждом шаге внешнего цикла переменная i содержит ссылку на форму, созданную тэгом <FORM>. Во внутреннем цикле осуществляется перебор элементов формы. Ссылка на набор elements формы указывается в качестве параметра i.elements цикла For Each. Переменная j внутреннего цикла последовательно ссылается на элементы формы, поэтому конструкция j.value дает значение параметра value элемента формы. Результат отображения страницы в окне браузера показан на рис. 9.13.

Обычно любой оператор цикла выполняется столько раз, сколько определено его параметрами, но иногда необходимо прервать выполнение цикла, например, в результате выполнения какого-либо условия. Для этих целей в VBScript существует несколько операторов Exit безусловного выхода из конструкций цикла:

  • Exit Do осуществляет безусловный выход из операторов группы DO... Loop

 

  • Exit For осуществляет безусловный выход из операторов For. . .Next и For Each...Next

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

Рис. 9.13. Отображение информации по элементам форм документа

Процедуры

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

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

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

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.