ПОНЯТНО О Visual Basic NET (том 2)

         

Понятие о процедурах с параметрами


Вернемся к началу. Изменим слегка нашу бессмысленную программу из 11.1.1:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        d = 100

        a = 2

        b = 30

        Debug.WriteLine(a + b)

        Debug.WriteLine(a * b + 1)

        Debug.WriteLine(a ^ b - 20)

        d = 9 - b

        f = 0

        a = 2

        b = 8

        Debug.WriteLine(a + b)



        Debug.WriteLine(a * b + 999)

        Debug.WriteLine(a ^ b - 20)

        d = a + 1

        a = 2

        b = -4

        Debug.WriteLine(a + b)

        Debug.WriteLine(a * b + 73)

        Debug.WriteLine(a ^ b - 20)

        f = f - a

End Sub

Мы замечаем здесь те же 3 фрагмента, но они уже чуть-чуть неодинаковые (неодинаковые места я выделил полужирным курсивом). Наша задача прежняя – укоротить программу. Спрашивается, как сделать это в усложнившихся условиях?

Посмотрим повнимательнее, в чем изменения. Мы видим, что они коснулись двух мест фрагментов: в операторе b= число каждый раз разное и в операторе Debug.WriteLine(a*b+   тоже каждый раз разное число.

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

Прежде всего, в теле процедуры вместо непослушных чисел записываем имена переменных Параметр1 и Параметр2. Но раз есть переменные, их нужно объявлять. А объявляются они специальным образом в заголовке процедуры. Окончательно получается вот что:

Sub Печать_разных_чисел (ByVal Параметр1 As Integer, ByVal Параметр2 As Integer)

        a = 2

        b = Параметр1

        Debug.WriteLine(a + b)

        Debug.WriteLine(a * b + Параметр2)

        Debug.WriteLine(a ^ b - 20)

End Sub

Здесь полужирным шрифтом я выделил новые для вас конструкции. Вместо Dim  мы пишем ByVal. На смысле слова ByVal  я остановлюсь позже.


Теперь о том, как вызывать эту процедуру. Вызывается она просто:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        d = 100
        Печать_разных_чисел(30, 1)
        d = 9 - b
        f = 0
        Печать_разных_чисел(8, 999)
        d = a + 1
        Печать_разных_чисел(-4, 73)
        f = f - a
End Sub
Вы видите, что в скобках оператора вызова указываются два числа. Это как раз те числа, которые нужно подставить во фрагмент на место переменных Параметр1 и Параметр2. Вот и все отличие.
Мы достигли поставленной цели и укоротили программу путем некоторого усложнения процедуры пользователя и ее вызова.
Переменные, объявленные в скобках заголовка процедуры, называются параметрами процедуры.
В качестве значений параметров в обращениях к процедурам можно писать не только константы, но и переменные, и выражения. Например, вместо
        Печать_разных_чисел(30, 1)
можно было написать
        Dim  m = 30
        Печать_разных_чисел (m,  m - 29)
Вообще, вы наверное уже привыкли, что в VB там, где можно писать числа, чаще всего можно писать и переменные, и выражения. Это же относится и к другим литералам, например, строкам.
Параметры разных типов. Параметры могут иметь не только числовой, но и строковый и многие другие типы. Пример:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Печатаем_3_раза("Кто там?  -  Это почтальон Печкин!")
        Печатаем_3_раза("Дядя Федор")
End Sub
Private Sub Печатаем_3_раза(ByVal Что_нибудь As String)
        Debug.WriteLine(Что_нибудь)
        Debug.WriteLine(Что_нибудь)
        Debug.WriteLine(Что_нибудь)
End Sub
Здесь вы видите процедуру пользователя  Печатаем_3_раза  и ее параметр – строковую переменную с именем  Что_нибудь. При нажатии на кнопку программа начинает работать и печатает следующий текст:
Кто там?  -  Это почтальон Печкин!
Кто там?  -  Это почтальон Печкин!
Кто там?  -  Это почтальон Печкин!
Дядя Федор
Дядя Федор
Дядя Федор

Содержание раздела