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

         

От чисел – к переменным


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

Public Class Form1

    Inherits System.Windows.Forms.Form

Windows Form Designer generated code

    Dim Гр As Graphics

    Private Sub Рисуем_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Рисуем.Click

        Гр = Me.CreateGraphics

        Дерево()

        'Здесь будет много вызовов других процедур:

        '  .  .  .  .  .  .  .  .  .

    End Sub

    Sub Дерево()

        Гр.FillEllipse(Brushes.Green, 200, 100, 20, 60)                                          'Зеленая крона



        Гр.DrawEllipse(Pens.Black, 200, 100, 20, 60)                                            'Черный контур для зеленой кроны

        Гр.DrawLine(Pens.Black, 200 + 10, 100 + 60, 200 + 10, 100 + 60 + 15)   'Ствол

    End Sub

End Class

Дерево получилось примерно такое, как на рисунке. Смысл чисел такой. 200 и 100 определяют местоположение дерева. Я их взял наобум. 20 и 60 – размер кроны. В строке процедуры, рисующей ствол, я написал много плюсов. Это чтобы было понятней, откуда взялись числа. Ведь, чтобы ствол находился на нужном месте, их величина должна зависеть от положения и размеров кроны. Так вот. 10 – это половинка от 20, иначе бы ствол был смещен влево или вправо. 15 – длина ствола.

Внимательно разберитесь в смысле чисел, иначе дальнейшее изложение будет непонятным.

Числа – плохо, переменные – хорошо. Забудем пока о грядущих параметрах, подумаем о вреде чисел.

Предположим, вам захотелось нарисовать дерево поправее. Для этого вам нужно в процедуре в четырех местах поменять число 200 на 250. Вот то-то и неудобно, что в четырех, а не в одном. Слишком много труда. В нашей программе это, конечно, пустяк, а вот в больших и сложных программах одна и та же величина может встречаться сотни раз, и чтобы ее изменить, придется вносить сотни исправлений.


Посмотрим, как нам помогут переменные величины. Придумаем переменную величину с именем x и везде заменим 200 на x. Вот как выглядит та же процедура, но с использованием переменной величины:
Sub Дерево()
        Dim x As Single = 200
        Гр.FillEllipse(Brushes.Green, x, 100, 20, 60)
        Гр.DrawEllipse(Pens.Black, x, 100, 20, 60)
        Гр.DrawLine(Pens.Black, x + 10, 100 + 60, x + 10, 100 + 60 + 15)
End Sub
Теперь для того, чтобы изменить горизонтальное положение дерева, достаточно заменить число 200 только в одном месте.
Избавляемся ото всех чисел. То, что мы сделали, настолько мне нравится, что я хочу заменить все числа переменными. Вот что у меня получилось:
Sub Дерево()
        Dim x As Single = 200
        Dim y As Single = 100
        Dim Ширина_кроны As Single = 20
        Dim Высота_кроны As Single = 60
        Dim Длина_ствола As Single = 15
        Гр.FillEllipse(Brushes.Green, x, y, Ширина_кроны, Высота_кроны)
        Гр.DrawEllipse(Pens.Black, x, y, Ширина_кроны, Высота_кроны)
        Гр.DrawLine(Pens.Black, x + Ширина_кроны / 2, y + Высота_кроны,  _
x + Ширина_кроны / 2, y + Высота_кроны + Длина_ствола)
End Sub
Как видите, для этого хватило 5 переменных. Обратите внимание, что вместо 10 я написал Ширина_кроны/2. Можно было бы для 10 придумать шестую переменную, но слишком увеличивать число переменных тоже ни к чему. А главное – тогда, если бы мы захотели изменить ширину кроны, нам бы пришлось менять значение и шестой переменной тоже,  иначе бы ствол был смещен влево или вправо. А это лишний труд.
Вы спросите: а зачем было придумывать переменную для числа 15? Ведь оно встречается только один раз. А на перспективу! Ведь в будущем вы захотите сделать дерево более красивым и сложным. Процедура усложнится и, глядишь, длина ствола будет фигурировать в нескольких местах.
Вторая причина, по которой мы используем переменные вместо всех чисел, состоит в том, что с ними программа, становясь длиннее, тем не менее становится понятнее, так как имена переменным мы придумываем, исходя из их смысла.
И третья причина – из переменных легко получаются параметры. Об этом мы сейчас и поговорим.
Для переменных я выбрал тип Single. Почему – я объяснил в 6.2.8. .

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