Функции


Процедура Main

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

Функция отличается от процедуры тем, что у нее нет выходных параметров, а все ее входные параметры называются аргументами.

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

Это все справедливо и для встроенных функций и для функций, определяемых программистом.

Общий синтаксис ее таков:

[Область видимости] [Static] Function имя функции (список аргументов) As тип

Выполняемые операторы

End Function

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

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

Пример:

Создадим функцию расчета подоходного налога. Для этого создадим форму с кнопкой «Пуск» и напишем программу:

 

Dim dohod, nalog As Single

 


Private Sub Command1_Click()

dohod = InputBox("Введите сумму дохода")

nalog = nds(dohod)

MsgBox "Налог составляет " & nalog

End Sub

 

Public Function nds(a)

If a > 50000 Then

nds = a * 0.2

Else

nds = a * 0.12

End If

End Function


 


Пример процедуры:

 

Sub SubDemo (Rlen As Single, Rwid As Single, Area As Single) 'заголовок процедуры SubDemo с тремя аргументами- Rlen-длина, Rwid-ширина и Area-площадь

Area = RLen * Rwid ' расчет площади

End Sub

 

Пример функции:

 

Function FunDemo (RLen As Single, Rwid As Single) As Single 'заголовок функции FunDemo с двумя аргументами- Rlen-длина и Rwid-ширина

FunDemo = RLen * Rwid ' расчет площади и присвоение имени функции вычисленного значения

End Function


Обратите внимание, что в процедуре для вычисления и записи результата используется аргумент Area (выходной аргумент). В функции для записи результата используется имя функции FunDemo.

 


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

 

Private Sub Command1_Click()

Dim A As Single, B As Single, C As Single

A = Val(InputBox("Введите значение длины прямоугольника"))

B = Val(InputBox("Введите значение ширины прямоугольника"))

Call SubDemo (A, B, C)

MsgBox "Площадь прямоугольника равна " & Str(C)

End Sub

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

 

Private Sub Command2_Click()

Dim A As Single, B As Single, C As Single

A = Val(InputBox("Введите значение длины прямоугольника"))

B = Val(InputBox("Введите значение ширины прямоугольника"))

C = FunDemo (A, B) * 2

MsgBox "Удвоенная площадь прямоугольника равна " & Str(C)

End Sub


 

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

1. Передача параметров по ссылке. Данный режим используется вVB по умолчанию. При этом вызываемая процедура может изменять значения тех переменных, которые ей передаются в качестве параметров.

2. Передача параметров по значению. В этом случае изменениям будут подвержены только «копии» переменных, передаваемых в процедуру.

Примеры

Private Sub Form_Load()

Dim x,y

X=3

Y=5

Call ByReference (x, y)

‘Результат: х=4, у=6

X=3

Y=5

Call ByValue (x, y)

‘Результат: х=4, у=5

End Sub

 

Sub ByReference (a, b)

‘Передача параметров по ссылке

а=а+1

b=b+1

End Sub

 

Sub ByValue (a, ByVal b)

‘Передача параметров по значению

а=а+1

b=b+1

End Sub, т.е. в переменную b после выполнения процедуры не передано никакого значения.

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

Пример:

 

Private vntA As Byte, vntB As Byte

 

Private Sub Form_Load()

vntA=5

vntB=10

Call Opt (vntA, vntB)

‘Результат: vntA=6, vnt=11

vntA=5

vntB=10

Call Opt (vntA)

‘Результат: vntA=6, vnt=10

End Sub

 

Private Sub Opt (a, Optional b)

a=a+1

If Not IsMissung (b) Then b=b+1 (если параметр указан – True)

End Sub

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

Private Sub Opt (a, Optional b=3)

a=a+b

End Sub и при первом вызове vntA=15, при втором – vntA=8.