Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Visual Basic.doc
Скачиваний:
105
Добавлен:
09.04.2015
Размер:
1.1 Mб
Скачать

Вызов процедур и функций

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

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

ИмяПроцедуры [Список значений аргументов]

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

Call ИмяПроцедуры [(Список значений аргументов)]

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

X = A + ИмяФункции ([Список значений аргументов])

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

Объявление процедур и функций

Процедура (функция) не может быть определена внутри какой-либо процедуры или функции.

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

[Private/Public][Static] Sub ИмяПроцедуры _

[(Список аргументов)]

[Инструкции]

[Exit Sub]

[Инструкции]

End Sub

Синтаксис объявления функции выглядит несколько иначе:

[Private/Public][Static] Function ИмяФункции _

[(Список аргументов)] [As Тип]

[Инструкции]

[ИмяФункции = Выражение]

[Exit Function]

[Инструкции]

[ИмяФункции = Выражение]

End Function

Пояснения синтаксиса:

  • Public. Этим словом объявляют в стандартном модуле процедуру или функцию, которая должна быть доступна всем процедурам и функциям всех контейнеров проекта. В форме это слово применять нельзя.

  • Private. В этом случае процедура или функция доступна только в пределах того контейнера, где она объявлена. Действует по умолчанию.

  • Static. Все переменные, объявленные в в процедуре или функции станут статическими, то есть сохранят значения после завершения ее работы и выхода из нее.

  • Exit Sub или Exit Function. Эти инструкции осуществляют досрочный выход из процедуры или соответственно функции.

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

[Optional] [ByVal / ByRef] [ParamArray] _ ИмяАргумента [()] [As Тип][= ЗначениеПоУмолчанию]

ИмяАргумента это имя переменной, массива, элемента управления или формы (в последних двух случаях тип принимает значенияControlилиForm). В случае массива после имени массива ставится пара скобок ( ), внутри которых не указываются границы значений индексов, что позво­ляет использовать одну процедуру (функцию) для разного числа элементов массива в каждом конкретном случае.

Тип может быть Byte, Boolean, Integer, Long, Currency, Single, Double, Date, String(только переменной длины),Variant, пользовательский тип илиControlиForm.

Список аргументов определяет связь по данным между вызывающей процедурой (процедура, из которой происходит вызов) и вызывае­мой процедурой.

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

Sub D (Длина As Single, Высота As Single, _

Площадь As Single)

Площадь = Длина * Ширина

End Sub

Пример обращения к процедуре:

D w1, h1, s1

D w2, h2, s2

s = s1 + s2

Пример объявления функции вычисления площади прямоугольника по заданным значениям сторон:

Function Df (Длина As Single, _

Высота As Single) As Single

Df = Длина * Ширина

End Function

Пример обращения к функции:

s = Df(w1, h1) + Df(w2, h2)

Пример процедуры формирования вектора из сумм элементов столбцов матрицы:

Sub MatrVektor (A() As Single, B() As Single, _

MaxI As Integer, MaxJ As Integer)

Dim J As Integer, I As Integer

For J = 1 To MaxJ

A(J) = 0

For I = 1 То MaxI

А(J) = А(J) + B(I,J)

Next

Next

End Sub

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

А вот пример функции для вычисления среднего значения элементов одномерного массива:

Function FunSumVector (A( ) As Single, _

MaxI As Integer) As Single

Dim Sum As Single, I As Integer

Sum = 0

For i=1 To MaxI

Sum = Sum + A(I)

Next

FunSumVector = Sum/MaxI

End Function

В следующем примере функция Celsiusпересчитывает градусы Фаренгейта в градусы Цельсия. Когда функция вызывается процедуройCommand1_Ckick, переменная, содержащая значение аргумента, передается функции. Результат вычислений возвращается вызывающей процедуре и выводится в окно сообщения.

Sub Command1_Ckick()

Dim t As Single

t = InputBox( _

"Введите температуру в градусах Фаренгейта“)

MsgBox "Температура равна " & _

Celsius(t) & " градусов Цельсия"

End Sub

Function Celsius(ГрадФар As Single) As Single

Celsius = (ГрадФар - 32) * 5 / 9

End Function

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

  • Optional. Это слово должно предшествовать имени того аргумента, который является необязательным. После необязательного аргумента могут следовать только необязательные же аргументы. Нельзя использовать необязательные аргументы совместно с массивом аргументов (ParamArray).

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

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

  • ParamArray. Массив аргументов. Таковым может быть объявлен только последний аргумент в списке, при этом он будет представлять собой переменную типа Variant, содержащую в себе массив. Этим способом можно передавать в процедуру или функцию значительные объемы данных. При использовании массива аргументов нельзя применять свойства Optional, ByVal и ByRef.

  • ЗначениеПоУмолчанию. Допустимо только для необязательного аргумента. Задает значение, которое будет автоматически присвоено аргументу в случае его отсутствия.