ПОНЯТНО О Visual Basic NET

       

При объявлении нужно указывать тип


Попытаемся вернуть нашей программе способность вычислять периметр:

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

        Dim a, b, S, p

        a = InputBox("Введите длину прямоугольника")

        b = InputBox("Введите ширину прямоугольника")

        S = a * b                           'Площадь

        p = a + a + b + b               'Периметр

        Debug.WriteLine(S)

        Debug.WriteLine(p)

    End Sub

Запустите проект. Введите длину 3 и ширину 2. Вы получите неожиданный результат:

6

3322



Площадь равна 6. Правильно. А вот периметр должен бы равняться 10, а не 3322. Откуда взялись эти 3322? Да ведь это не что иное, как две тройки и две двойки! И получились они из  a+a+b+b.

Здесь тот же случай, что и с калькулятором (см. 3.3). Там было то же самое, пока мы не применили Val. Почему так получается?

Первое: VB считает содержимое текстового поля в окне InputBox (точно так же, как и обычного текстового поля) текстом, а не числом, если даже оно состоит из цифр. А раз так, то и значения переменных a и b, взятые из текстового поля, он тоже считает текстом, а не числами. Не пей из копытца – козленочком станешь!

Второе: VB знает, что по правилам языка знак + имеет несколько смыслов в зависимости от того, к чему он применяется. В частности, при работе с числами это приказ складывать, а вот при работе с текстом это не приказ складывать, а приказ выстраивать в цепочку. А раз так, то и результат получился тот, что мы видели.

Почему же тогда площадь вычислилась нормально? Потому что там было не сложение, а умножение. VB знает, что по правилам языка знак умножения * не имеет смысла при работе с текстом. Значит (догадывается умный и услужливый VB) мой господин-человек не хочет, чтобы переменные  a и b  имели текстовое значение, иначе он не стал бы применять знак умножения, ведь мой хозяин умный. Значит иметь им числовое значение! Проверьте: подсуньте компьютеру вместо чисел буквы – VB  запротестует при вычислении площади.


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

Так вот: чтобы не перенапрягать умственные способности VB и предохранить себя от неприятностей, нужно при объявлении переменных величин указывать их так называемый тип (на балу – титул!).

Что это такое? Сделаем небольшое добавление к оператору Dim. В остальном оставим процедуру неизменной. Вот что у нас получится (добавление я выделил полужирным шрифтом):

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

        Dim a, b, S, p As Integer

        a = InputBox("Введите длину прямоугольника")

        b = InputBox("Введите ширину прямоугольника")

        S = a * b                           'Площадь

        p = a + a + b + b               'Периметр

        Debug.WriteLine(S)

        Debug.WriteLine(p)

    End Sub

Оператор объявления

Dim 

a, b, S, p

As

Integer

переводится так:

Объявляю переменные величины

a, b, S, p

как

целые числа

то есть вы обязуете VB обращаться с переменными величинами a, b, S, p, как с целыми числами и ничем иным. Говорят, что переменные a, b, S, p   имеют  тип   Integer.

Операторы объявления будем пока писать в окне кода только внутри процедур, в их начале. Подробнее о местах, где можно делать объявления и о способах, написано в 21.9, но вам пока рано это знать.

Запустите проект. Проверьте его работу. Теперь все работает нормально.


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