Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
46
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
  1. Процедуры и функции

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

    1. Процедуры

До сих пор мы с вами имели дело только с процедурами, задающими реакцию компьютера на те или иные события (нажатие на кнопку, загрузка формы и т.д.). Если вспомнить пример программы из Error: Reference source not found, то это процедуры типа "Что делать, если …". Обязательно перечитайте Error: Reference source not found, если вы забыли, что это такое, так как настала пора познакомить вас с другими процедурами – процедурами типа "Как…". Будем называть их процедурами пользователя.

      1. Понятие о процедурах пользователя

Рассмотрим бессмысленную программу:

Public Class Form1

Inherits System.Windows.Forms.Form

Windows Form Designer generated code

Dim a, b, d, f As Integer

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 = 30

Debug.WriteLine(a + b)

Debug.WriteLine(a * b + 1)

Debug.WriteLine(a ^ b - 20)

d = a + 1

a = 2

b = 30

Debug.WriteLine(a + b)

Debug.WriteLine(a * b + 1)

Debug.WriteLine(a ^ b - 20)

f = f - a

End Sub

End Class

Предположим, эта программа раздражает нас не своей бессмысленностью, а своей длиной. Как сократить ее?

Замечаем, что программа содержит 3 одинаковых фрагмента (в тексте я их выделил полужирным курсивом):

a = 2

b = 30

Debug.WriteLine(a + b)

Debug.WriteLine(a * b + 1)

Debug.WriteLine(a ^ b - 20)

В этом случае программисты всего мира сокращают программу так. Они придумывают повторяющемуся фрагменту произвольное имя, например,

Печать_разных_чисел

Затем они вписывают в окно кода этот фрагмент отдельно, снабдив его заголовком

Sub Печать_разных_чисел()

и конечной строкой

End Sub

Получается вот что:

Sub Печать_разных_чисел()

a = 2

b = 30

Debug.WriteLine(a + b)

Debug.WriteLine(a * b + 1)

Debug.WriteLine(a ^ b - 20)

End Sub

Они называют все это процедурой пользователя, после чего имеют право во всем окне кода вместо полного текста фрагмента писать только его имя Печать_разных_чисел. Посмотрите на получившуюся программу целиком:

Public Class Form1

Inherits System.Windows.Forms.Form

Windows Form Designer generated code

Dim a, b, d, f As Integer

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

d = 100

Печать_разных_чисел()

d = 9 - b

f = 0

Печать_разных_чисел()

d = a + 1

Печать_разных_чисел()

f = f - a

End Sub

Sub Печать_разных_чисел()

a = 2

b = 30

Debug.WriteLine(a + b)

Debug.WriteLine(a * b + 1)

Debug.WriteLine(a ^ b - 20)

End Sub

End Class

Получившаяся программа выполняет абсолютно то же самое, что и исходная.

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

Все операторы, из которых состоит процедура, без заголовка и конечной строки, будем называть телом процедуры. А вместе с ними – объявлением процедуры.

Слово Печать_разных_чисел используется внутри процедуры Sub Button1_Click, как настоящий оператор, и выполняется, как настоящий оператор. Суть его выполнения в том, что когда VB в процессе выполнения программы натыкается на оператор Печать_разных_чисел, он ищет в программе объявление процедуры с именем Печать_разных_чисел и начинает выполнять тело этой процедуры. Этот процесс называется вызовом процедуры или обращением к процедуре. Говорят также, что управление передается процедуре. После выполнения тела процедуры VB возвращается к выполнению программы. Говорят, что управление возвращается к программе.

Вы обязательно должны проверить то, что я только что сказал, и собственными глазами убедиться в правдивости моих слов. Для этого обязательно выполните эту программу в пошаговом режиме! Это самое необходимое из того, что вы должны сделать. При этом обязательно же обратите внимание вот на что:

Порядок исполнения операторов показывает желтая полоса. Она перескакивает с оператора Печать_разных_чисел() на строку Sub Печать_разных_чисел(), после чего пробегает по всем 5 операторам тела процедуры. Дойдя до конечной строки End Sub, она возвращается на тот же оператор Печать_разных_чисел(), с которого и «прыгала», после чего переходит на оператор, следующий сразу же за этим самым оператором (в первый раз в нашем случае это оператор d=9-b). Вы просто обязаны усвоить этот порядок на всю жизнь.

Два вида процедур. Вот у вас в окне кода две процедуры. Одна из них – Button1_Click и вы знаете, когда она выполняется – когда нажимается кнопка Button1. Она принадлежит к числу привычных нам процедур обработки событий. А когда выполняется другая – Печать_разных_чисел? Только тогда (и если), когда (и если) в других процедурах компьютер наткнется на оператор Печать_разных_чисел(). А если этот оператор мы забыли там написать, то процедура Печать_разных_чисел не выполнится никогда.

Вы усвоили, что когда завершает свою работу процедура пользователя, VB возвращается в процедуру, которая ее вызвала. А куда он возвращается, когда завершает свою работу процедура обработки событий? А никуда. Просто ждет ваших дальнейших действий, вызывающих события, например, нажатий на кнопку.