Передача параметров в процедуры

 

В процедурах событий набор параметров зависит от события и не может быть изменен разработчиком.

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

В VISAUL BASIC параметры могут передаваться двумя способами:

- либо как ссылки (ByRef)

- либо как значение (ByVal)

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

По умолчанию параметры в VISAUL BASIC передаются по ссылке, но можно указывать явно ключевое слово ByRef перед параметром в заголовке процедуры:

Sub pr1(ByRef n As String)

При передаче параметра по значению VISAUL BASIC передает копию содержимого переменной вместо ее адреса в памяти, и функция или процедура не сможет напрямую модифицировать исходное значение. Ключевое слово ByVal перед параметром должно указываться обязательно:

Function fkl(ByVal k As String) As Boolean

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

Именованные параметры

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

При вызове процедуры следует именовать параметры:

имя параметра:=значение

Пример:

Private Sub Summa(a,b,c)

c=a+b

End Sub

Private Sub Command1_Click()

Summac:=S,b:=val(Text1.Text),a:=val(Text2.Text)

Text3.Text=Str(S)

End Sub

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

Необязательные параметры

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

Пример:

Sub Pr(a, Optional b)

If IsMissing(b) Then

Print a,b

Else

Print a

EndIf

End Sub

Private Sub Command1_Click()

Pr 1

Pr 1,2

End Sub

Примечание: В примере показаны два варианта вызова процедуры Pr. В процедуре Pr функция IsMissing проверяет передан или нет аргумент типа Variant.