Visual Basic для новичков. Шаг за шагом. Самоучитель / справочник - страница 26
Public Static Sub Proc1 ()‘ процедура Proc1 без аргументов
Dim CallCount As Integer‘ объявляем целую переменную
If CallCount> = 5 Then Exit Sub ‘ если CallCount> =5 – выход
CallCount = CallCount +1 ‘ увеличиваем переменную на 1
…далее выполняется что-то полезное…
End Sub‘ завершение процедуры
Эта процедура подсчитывает количество своих вызовов, сохраняя его в переменной CallCount. Процедура Proc1 выполняет какие-то полезные действия только в течение первых 5-ти вызовов, а следующие работают «вхолостую».
Данный пример иллюстрирует тот факт, что значение переменной CallCount хранится в памяти компьютера между вызовами процедуры.
6.3. Процедура Function (Функция)
Объявление процедуры Function (Функция) по своему синтаксису подобно Sub (Подпрограмма). Отличия обусловлены тем, что функция возвращает значение:
[{Private|Public}] [Static] Function имя [(аргументы)] [As тип]
[инструкции]
имя = выражение
[Exit Function]
[инструкции]
End Function
После ключевого слова As (Как) может быть указан тип данных, возвращаемых функцией. Внутри тела процедуры Function (Функция) обязательно должен встретиться оператор, который присваивает значение имени функции, например:
Private Function GetValue ()
[инструкции]
GetValue = 3
[инструкции]
End Function
В языке Visual Basic определено большое количество встроенных функций, которые могут вызываться, но их внутреннее содержимое скрыто от программиста. Чтобы получить возвращаемое значение функции, указывают ее имя.
В данном примере производится преобразование числа в текстовую строку с помощью функции Str и запись ее в переменную strTemp:
Dim strTemp As String
strTemp = Str (-19.436)
Если возвращаемое значение не требуется, можно вызвать функцию так же, как и процедуру Sub. Следует опустить скобки и указать список аргументов. Например, следующая строка выводит сообщение с текущей датой и временем:
MsgBox Now ()
Здесь используются сразу две встроенные функции языка Visual Basic. MsgBox не возвращает никакого значения, а только выводит окно сообщения. Функция Now используется в качестве аргумента, возвращая дату и время.
6.4. Особенности передачи аргументов
При вызове процедур типа Sub (Подпрограмма) или Function (Функция) возможно использование двух способов передачи фактических значений аргументов:
• по ссылке (ByRef),
• по значению (ByVal).
По умолчанию параметры передаются в виде ссылок, что дает возможность процедурам изменять их значения. Если необходимо предотвратить возможные изменения аргументов процедуры, следует осуществлять их передачу по значению, для чего при объявлении процедуры перед аргументом использовать ключевое слово ByVal, например:
Sub Proc2 (ByVal Arg1)
End Sub
Кроме параметров, которые должны быть непременно указаны при вызове процедуры, встречаются и необязательные параметры. Для их обозначения при объявлении применяется ключевое слово Optional (Необязательный):
Sub Proc3 (Arg1, Optional Arg2)
End Sub
При вызове процедуры с аргументом Optional (Необязательный) можно как указывать, так и не указывать необязательный аргумент. Если аргумент не указан, то для него используется имеющееся значение по умолчанию. Если по умолчанию значение не присвоено, аргумент обрабатывается так же, как любая другая переменная соответствующего типа.