Шрифт:
Закладка:
Наши необъявленные переменные, как голодные дворняги, готовы есть все, что им дают. Введите вместо трех чисел три таких текста: Ко, ро, бочка. Результат — Коробочка.
Почему же тогда в примере о прямоугольнике все прошло нормально? Потому что там было еще умножение. Visual Basic знает, что по правилам языка знак умножения * не имеет смысла при работе с текстом. Значит (догадывается умный и услужливый Visual Basic) мой господин — человек не хочет, чтобы переменные а, Ь, с были текстовыми. Значит быть им числовыми! Проверьте: подсуньте компьютеру вместо чисел коробочку — Visual Basic запротестует.
В примере о прямоугольнике Visual Basic догадался правильно, а в примере о треугольнике ума не хватило. Ну что, теперь везде при сложении применять Val? Не хочется, программы будут получаться громоздкими. Да и разве все дело только в сложении? Как узнаешь, где в следующий раз соломки подстелить?
Так вот, чтобы не перенапрягать умственные способности Visual Basic и предохранить себя от неприятностей, нужно все переменные величины объявлять!
Как объявлять переменные величины
Добавим в окно кода нашего проекта, на самый верх, над заголовком процедуры четыре строки. Получится:
правильная процедура:
Dim a As Integer
Dim b As Integer
Dim с As Integer
Dim p As Integer
Private Sub Command1 Click()
а = InputBox("Введите первую сторону треугольника")
b = InputBox("Введите вторую сторону треугольника")
с = InputBox("Введите третью сторону треугольника")
р = а + b + с
Debug.Print а, b, с, p
End Sub
Объявление
Dim а As Integer
переводится так:
Переменная а величина как целое число
то есть вы обязуете Visual Basic обращаться с переменной величиной а как с целым числом и ничем иным. Говорят, что "переменная а имеет тип Integer". Аналогично объявлены и переменные Ь, с, р. Объявления будем пока писать выше процедур.
Запустите проект. Проверьте его работу.
Вместо четырех строк
Dim a As Integer
Dim b As Integer
Dim с As Integer
Dim p As Integer
можно для краткости написать одну:
Dim a As Integer, b As Integer, с As Integer, p As Integer
Но если вы захотите написать еще короче:
Dim а, Ь, с, р As Integer
то Visual Basic неправильно вас поймет.
Типы данных
Много ли прав у Integer? Посмотрим. Попробуем ввести дробное значение первой стороны треугольника — 2,3. Именно так — с запятой, а не точкой. Посмотрим результат. Visual Basic считает а целым числом 2. А теперь — 2,6.
Visual Basic считает а целым числом 3. Все правильно. Наш барон высокомерно отказывается быть дробным числом и поэтому любое число, которое мы ему предлагаем, округляет до целого.
Предположим, мы этим недовольны. Мы желаем, чтобы все числа могли быть дробными. Пожалуйста! Вот так:
Dim a As Single
Dim b As Single
Dim с As Single
Dim p As Single
Private Sub Command1_Click()
a = InputBox("Введите первую сторону треугольника")
b = InputBox("Введите вторую сторону треугольника")
с = InputBox("Введите третью сторону треугольника")
р = а + b + с
Debug.Print а, Ь, с, р
End Sub
Объявление
Dim а As Single
переводится так:
Переменная величина а как десятичная дробь обычной точности
то есть вы обязуете Visual Basic обращаться с переменной величиной а как с десятичной дробью и ничем иным. Десятичная дробь — это любое число, которое может иметь целую и дробную часть (например, 27,3908), в частности это и целое число. Об обычной точности попозже. Говорят, что "переменная а имеет тип Single".
Законный вопрос: зачем нам нужен тип Integer, когда тип Single "гораздо лучше"? Ответ: Не во всем и не всегда он лучше, иначе не стали бы его создавать вообще.
Типов данных в Visual Basic довольно много и каждый полезен по-своему. Рассматривать новые типы я буду по мере надобности. А сейчас отмечу главное — в солидном проекте не объявлять переменные неприлично! Поэтому переменные величины нужно объявлять всегда. А чтобы по нашей человеческой рассеянности какая-нибудь переменная не проскочила необъявленной, поручим компьютеру не пускать таких, то есть прикажем Visual Basic выдавать соответствующее сообщение при нашей попытке запустить проект с необъявленными переменными. Для этого — Tools->Options->Editor->Require Variable Declaration. Отныне в окне кода любого создаваемого вами проекта будет появляться строка Option Explicit, что означает требование обязательно объявлять переменные этого проекта. В общем, "Посторонним В!.." Тем не менее, свобода есть свобода, и вы всегда можете в каком-нибудь проекте стереть строку Option Explicit.
Я сам в примерах этой книги поначалу все, что можно, буду объявлять, но затем для экономии "места и смысла" перестану это делать. Не берите с меня пример!
Вот еще причина, по которой удобно использовать Option Explicit. Как по вашему, что напечатал у меня следующий фрагмент:
х = 2
Debug.Print х
Если вы думаете, что 2, то ошибаетесь. Ничего не напечатал. Потому что в первой строке присутствует латинская буква "икс", а во второй строке я нечаянно написал русскую букву "хэ". Я был в недоумении. Не помогло и объявление переменной "икс" (не помогло бы, между прочим, и объявление "хэ"). Visual Basic не нашел в программе никаких ошибок. И только применение Option Explicit дало намек на истинную причину ошибки.
Переменные величины и память
Полностью механизм работы переменных величин не понять, если не узнать, как они хранятся в оперативной памяти компьютера.
Оперативная память нужна компьютеру для того, чтобы хранить во время выполнения программы саму эту программу и данные, с которыми программа работает.
Как устроена оперативная память (или просто память)? Представьте себе тетрадный листок в клеточку. В каждую клетку вы имеете право записать карандашом какую-нибудь букву или цифру или знак + или вообще любой символ, который можно найти на клавиатуре. А можете и стереть ластиком и записать