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

Область видимости – блок


Блоком называется последовательность всех выполняющихся друг за другом операторов. Если вы помните, эти операторы легко узнать, так как у них одинаковый отступ от левого края окна. Блоки могут входить внутрь других блоков. Рассмотрим бессмысленную программу:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim a, b, c As Integer

        b = 6

        For a = 5 To 6

            b = 8

            c = 2 * 2

        Next

        a = 1

        If a > 0 Then

            a = 7

            c = 5 * 5

            a = 8



        End If

        a = 3

End Sub

Все тело процедуры есть блок из 5 операторов:

        b = 6

        For . . .

        a = 1

        If . . .

        a = 3

Внутрь этого блока входят два блока. Один есть содержимое оператора For:

            b = 8

            c = 2 * 2

Другой – содержимое оператора If:

            a = 7

            c = 5 * 5

            a = 8

Если бы внутрь этих двух блоков входили сложные операторы, то операторы, из которых состоят эти сложные операторы, тоже составляли бы блоки, входящие в упомянутые. Матрешка.

Оказывается, целесообразно иметь области видимости меньшие, чем процедура. Это блоки.

Зачем они могут понадобиться? Ну, например, мы видим, что в нашем примере переменная c в каждом блоке делает «важные» дела, причем в каждом блоке свои. Мы опасаемся, как бы при дальнейшей доработке программы значения переменной c из одного блока при нашей невнимательности не повредили бы значения переменной c из другого блока. Что делать для спокойствия? Уберем объявление c из начала процедуры и объявим переменную c внутри каждого блока:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Dim a, b As Integer

        b = 6

        For a = 5 To 6

            Dim c As Integer

            b = 8

            c = 2 * 2

        Next

        a = 1

        If a > 0 Then

            Dim c As Integer

            a = 7

            c = 5 * 5

            a = 8

        End If

        a = 3

End Sub

Теперь мы имеем в процедуре две совершенно независимые переменные, имеющие одинаковое имя c. Каждая из них создается и инициализируется в момент, когда компьютер заходит в ее блок. Она живет и работает, пока работает блок. Когда же компьютер выходит из блока, переменная уничтожается вместе со своим значением.

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

У констант тоже существует область видимости блок.



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