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

Зачем нужны разные области видимости


Зачем такие ограничения и неудобства? Какой во всем этом смысл? Поговорим об этом.

Создание разных областей видимости для разных переменных является способом повышения надежности больших программ  и понижения вероятности запутаться при их написании. Программы, создаваемые сегодня профессиональными программистами, очень велики – десятки и сотни тысяч строк. Таково, например, большинство игровых программ. Естественно, один человек не может достаточно быстро создать такую программу, поэтому пишется она обычно группой программистов. Для этого программа делится на части, и каждый программист пишет свою часть. И все равно, в каждой части присутствуют  десятки и сотни процедур с десятками и сотнями переменных, в которых человеку легко запутаться. Ну а уж когда все эти части соединяют вместе, начинается кавардак!

    Рассмотрим бессмысленную «сложную» программу, не использующую локальных переменных, и покажем, как она из-за этого уязвима. Пусть в ней присутствуют сотни процедур. Рассмотрим две из них:

Dim x As Integer

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

        x = 2 * 2

        B()

        Debug.WriteLine(x)

End Sub

Private Sub B()

        x = 5 * 5

        Debug.WriteLine(x)

End Sub



Автор первой процедуры хочет, чтобы человечество узнало, сколько будет дважды два, для чего и написал первую и третью строчку своей процедуры. Между ними вклинилась вторая строчка – вызов процедуры B. Для чего она нужна, автор и сам не знает, но начальство потребовало, чтобы она была вставлена именно в это место процедуры в интересах проекта. Ну и ладно, жалко что ли?

Автор второй процедуры сообщает человечеству результат умножения 5 на 5.

И все было бы хорошо, и все были бы довольны, если бы авторов не угораздило назвать переменные одинаковыми именами. Начальство ожидало, что сначала компьютер напечатает 25, а потом 4, но на самом деле, как легко видеть, будет напечатано

25

25

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

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

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

       Dim x As Integer

        x = 2 * 2

        B()

        Debug.WriteLine(x)

End Sub

Private Sub B()

        Dim x As Integer

        x = 5 * 5

        Debug.WriteLine(x)

End Sub

Данная программа к удовольствию директора напечатает

25

4

Таким образом, вы видите, что смысл механизма локальных переменных – в увеличении надежности программирования. Я настоятельно советую:

Те переменные, которые наверняка не понадобятся вне процедуры, делайте локальными.



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