ZСтепень = ДеФункция(3, 4)
После выполнения этого оператора переменная ZCTeneHb будет содержать значение, вычисленное процедурой ДеФункция, - процедурой типа Function - и этим значением будет 3 . Обратите внимание, что в данном случае процедуре передаются аргументы, заключенные в скобки после имени процедуры.
Привлекательные аргументы
Аргументы представляют значения, которые предполагается передавать от одной процедуры к другой. Аргументы назначаются процедуре тогда, когда необходимо, чтобы эта процедура изменяла свое поведение в зависимости от тех значений, которые она получает при ее вызове. Аргументы могут иметь и процедуры типа Sub, и процедуры типа Function.
Рассмотрим снова процедуру ДеФункция:
Public Function ДеФункция(х As Integer, y As Integer )
Dim Z AS Integer
z = x + у
ДеФункция = x ́ z
End Function
У этой процедуры два аргумента - х и у. Как видно из программного кода, аргументы процедуры являются частью ее объявления. Аргументы размещаются в скобках сразу после имени процедуры в списке аргументов, где для каждого из аргументов задается имя и тип данных (подробности - ниже, в разделе Создание процедур с аргументами).
Если у процедуры есть аргументы, то она будет требовать эти аргументы при выполнении своей работы. Внутри такой процедуры аргументы играют практически ту же роль, что и переменные, объявляемые самым обычным образом.
Посмотрите внимательнее на программный код процедуры ДеФункция. После объявления переменной z процедура вычисляет значение этой переменной, равное сумме двух аргументов х и у. В следующей строке, чтобы вычислить возвращаемое значение самой процедуры, аргумент х возводится в степень z. Как видите, к, у и z играют одинаковые роли. Если хотите, можно возвести z в степень х.
Но если аргументы так похожи на обычные переменные, зачем же вообще их использовать? В действительности их можно и не использовать - все, что делают аргументы, можно сделать с помощью обычных переменных. Но аргументы упрощают использование процедур и восприятие программного кода.
Пришло время рассмотреть пару примеров для сравнения. Сначала рассмотрим процедуры, использующие аргументы Модель и ГодВылуска для передачи значений:
Public Sub ВызывающаяПроцедура()
ДоходОтСтаройМашины = ПродажаСтаройМашины[Rambler _
Classic,1962)
End Sub
Public Function ПродажаСтаройМашины(Модель As String, _
ГодВыпуска As Integer)
Dim ВозрастнойФактор As Integer
Dim ЦеновойФактор As Single
ВозрастнойФактор = ГодВыпуска - 1900
If Модель = Rambler Classic Then
ЦеновойФактор = .001
Else If Модель = Dodge Dart Then
ЦеновойФактор = .005
Else If ...
(другие операторы)
End If
ПродажаСтаройМашины = ВозрастнойФактор * _
ЦеновойФактор * 1000
End Function
Здесь процедура с именем ВызывающаяПроцедура использует процедуру типа Function с именем ПродажаСтаройМашины для вычисления результата с именем
ДоходСтСтаройМашины. Раз процедура типа Function использует аргументы, вы можете сообщить ей непосредственно, какую машину вы продаете и какого она года выпуска.
Теперь рассмотрим две процедуры, выполняющие ту же работу без аргументов. Заметим, что в данном случае необходимо объявить две переменные на уровне модуля, вне процедур, чтобы этими переменными могли пользоваться обе процедуры.
Dim Модель As String
Dim ГодВыпуска As Integer
Public Sub ВызывающаяПроцедура2()
Модель = Dodge Dart
ГодВыпуска = 1963
ДоходОтСтаройМашины = ПродажаСтаройМашины2()
End Sub
Public function ПродажаСтаройМашины 2()
Dim ВозрастнойФактор As Integer
Dim ЦеновойФактор As Single
If Модель = Rambler Classic Then
ЦеновойФактор = .001
Else If Модель = Dodge Dart Then
ЦеновойФактор = .005
Else If ...
(другие операторы)
End If
ПродажаСтаройМашины = ВозрастнойФактор * _
ЦеновойФактор * 1000
End Function
Пока эти примеры не улетучились из вашей головы, я приведу список преимуществ, которые дает использование аргументов для обмена информацией между процедурами.
* При чтении программного кода процедуры именно аргументы ясно указывают, какие значения требуются процедуре от других частей программы для выполнения работы.
Читать дальше