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

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


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

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 возвращается в процедуру, которая ее вызвала. А куда он возвращается, когда завершает свою работу процедура обработки событий? А никуда. Просто ждет ваших дальнейших действий, вызывающих события, например, нажатий на кнопку.

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