Стирание_ старого_рисунка()

Граф.DrawEllipse(Pens.Black, 100, 100, 200, 200) 'Голова

Граф.DrawLine(Pens.Black, 300, 200, 400, 200) 'Нос

End Sub

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

Процедуры пользователя улучшают читабельность. Итак, процедуры пользователя укорачивают программы. Но не только это. Они еще делают их более «читабельными», то есть более понятными при чтении, когда нужно быстро схватить общий смысл процедуры. Вообразите, что эта программа чужая и вы ее читаете впервые. Сравните в этом аспекте текст процедуры рисования пушки из 2 и 3 вариантов программы. Очевидно, что вы быстрее разберетесь, что делает эта процедура, именно в 3 варианте. Но этого не произойдет, если вы неудачно назовете процедуру пользователя. Если вы вместо имени Стирание_старого_рисунка употребите имя Крутая_процедурка, то не о какой понятности и читабельности не может быть и речи.

Call. Есть еще один способ обратиться к процедуре. Вместо оператора

Стирание_старого_рисунка()

можно написать оператор

CallСтирание_старого_рисунка()

Смысл этих двух операторов совершенно одинаков. Вторым способом часто пользовались раньше. С английского слово «Call» переводится «Вызов».

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

Вернемся к началу. Изменим слегка нашу бессмысленную программу из 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_раза и ее параметр – строковую переменную с именем Что_нибудь. При нажатии на кнопку программа начинает работать и печатает следующий текст:

Кто там? - Это почтальон Печкин!

Кто там? - Это почтальон Печкин!

Кто там? - Это почтальон Печкин!

Дядя Федор

Дядя Федор

Дядя Федор

Наши рекомендации