Первое знакомство с переменными
На каком бы языке вы ни программировали, один из важнейших аспектов — это различные типы данных, используемые данным языком. В частности, к их числу принадлежат переменные, массивы и константы (хотя это далеко не все существующие типы). Они жизненно необходимы для работы приложений. Итак, что же такое переменная? Переменной называется область памяти, в которой могут храниться различные значения. Как нетрудно догадаться по названию, значение переменной может изменяться.
Что такое память?
Чтобы лучше понять, как работают переменные, необходимо сначала поближе познакомиться с памятью. Представьте себе лист бумаги в клетку. Каждый квадрат имеет размеры 5x5 мм и площадь 0,25 см2. Если представить память компьютера в виде этого листа, то один квадрат будет соответствовать одному байту. Один килобайт (1024 байт) будет иметь размеры 16x16 см. На первый взгляд кажется, что это не так уж много, но мегабайт оказывается на удивление большим. Один мегабайт равен 1024 Кбайт, поэтому лист будет иметь размеры 5,12x5,12 м, или 26,2144м2.
Если на вашем компьютере установлено 16 Мбайт памяти, лист увеличивается до размеров 20,48x20,48 м, то есть около 420 м2. Почти треть футбольного поля!
Если же одному квадратику будет соответствовать не байт, а бит, то лист получится еще больше — размером почти в три футбольных поля. К счастью, на первых порах вам не придется работать с битами. Теперь вы примерно представляете себе, как устроена память, и поймете, как работают переменные различных типов.
Типы переменных
Как только ваши приложения начнут хранить, извлекать и отображать данные, вам неизбежно придется работать с переменными, массивами и константами. Эти фундаментальные средства предназначены для хранения в памяти временных величин. Они используются не только в Visual Basic, но и в других языках программирования.
Переменной называется имя, определяющее область памяти для хранения временной величины. Такая величина может изменяться во время работы приложения. Переменные применяются в самых разных ситуациях, многие из них выузнаете по мере накопления опыта. В Visual Basic существует несколько типов переменных, называемых типами данных. Каждый тип данных обладает собственными характеристиками (см.табл. 7.1).
Таблица 7.1. Типы даннъис для переменнъис и констант
Тип данных | Назначение |
Integer | Числовая переменная, содержит целые числа из интервала -32 768 — 32767 |
Long | Числовая переменная, отличается от Integer более широким интервалом |
Single | Числовая переменная — содержит числа с десятичной точкой |
Double | Числовая переменная, отличается от Single более широким интервалом |
Currency | Переменная для хранения денежных величин |
String | Переменная для хранения текстовых или строковых значений |
Byte | Числовая переменная — интервал 0-255, даже меньше, чем у Integer |
Boolean | Переменная для хранения значений True или False |
Date | Переменная для хранения дат |
Object | Переменная для хранения ссылок на объекты Visual Basic и других приложений |
Variant | Универсальная переменная общего назначения, которая может хранить значения большинства других типов |
Как видно из табл. 7.1, типов переменных много. Материал, изложенный в книге, требует знакомства лишь с самыми распространенными: байтовым (Byte), строковым (String), целым (Integer), логическим (Boolean), универсальным (Variant) и объектным (Object).
Объектный тип может быть разбит на тип^усатегории — формы, элементы, принтеры и т. д. Универсальный тип удобен в томотношении, что онможет хранить значения всех остальных типов, однако при отладке больших приложений он может вызвать проблемы. Обо всех этих нюансах вы узнаете из главы 12, «Отладка приложений».
Байтовые переменные
Простейшим типом переменных является байтовый тип. Чтобы не углубляться в тонкости двоичной арифметики, поверьте мне на слово: байтовая переменная может хранить числа от 0 до 255.
Байтовые переменные хорошо подходят для хранения малых числовых величин, в частности символов из набора ASCII и двоичных данных. Работа с байтовыми переменными демонстрируется на следующем примере:
1. Создайте новый проект командой File > New Project.
2. В окне Project Wizard выберите значок Standard EXE.
3. Когда Visual Basic завершит создание проекта, удалите форму Form1. Для этого следует щелкнуть на строке Form1 правой кнопкой мыши в окне проекта и выбрать команду Remove Form1 в контекстном меню.
4. Если Visual Basic предложит сохранить Form1, нажмите кнопку No.
5. Щелкните правой кнопкой мыши в окне проекта и выберите команду Add > Module в контекстном меню.
6. В диалоговом окне Add Module выберите значок Module. B проекте появится пустой модуль.
7. Если модуль еще не открыт в окне программы, дважды щелкните на строке Module 1 в окне проекта.
8. Добавьте в модуль следующий фрагмент:
Option Explicit
Private Sub Main()
Dim b As Byte
Dim text As String
Debug.Print "ASCII-таблица"
for b = 0 To 63
text = Str$(b) & " " & Chr$(b)
text = text & Chr$(9) & Chr$(9)
text = Str$(b + 64) & " " & Chr$(b + 64)
text = text & Chr$(9) & Chr$(9)
text = Str$(b + 128) & " " & Chr$(b + 128)
text = text & Chr$(9) & Chr$(9)
text = Str$(b + 192) & " " & Chr$(b + 192)
text = text & Chr$(9) & Chr$(9)
Debug.Print text
Next
End
End Sub
9. Запустите программу командой Run > Start.
В окне отладки промелькнет таблица, состоящая из чисел и символов. Она известна программистам под названием ASCII-таблицы. В нее входят числа от 0 до 255, что соответствует байтовому типу данных. Рядом с каждым числом выведен соответствующий ASCII-символ. Пользуясь этими числами, вы можете включать в свою программу непечатаемые и другие специальные символы. Например, в приведенном выше фрагменте несколько раз встречается ссылка вида Chr$(9). Значение 9 соответствует символу табуляции. Поскольку вы не можете ввести его в тексте программы, приходится использовать Chr$(9). Команда Debug.Print выполняет вывод в окне отладки. Более подробная информация о ней приведена в уроке 9, «Печать».
ПОДСКАЗКАЧтобы включить в программу символ, который невозможно ввести с клавиатуры, найдите его код в ASCII-таблице и воспользуйтесь функцией Chr$(), указав ASCII-код символа в скобках.
Строковые переменные
Разобравшись с байтовыми переменными, мы перейдем к более полезному способу их применения. Строковые переменные (или просто строки) занимают в памяти цепочку последовательных байтов и могут содержать буквы и числа. Вместе эти байты образуют мнемонические сокращения, слова и даже целые предложения. На рис. 7.2 изображена простейшая строка в памяти. Обратите внимание: ее общая длина равна 11 байтам, так как каждый ASCII-символ представлен одним байтом.
Некоторые свойства, с которыми нам уже приходилось работать, на самом деле представляли собой строковые переменные. Так, свойства Name и Caption имеют алфавитно-цифровые значения. Чтобы работать со строковой переменной,нужно выполнить ряд предварительных действий:
О выбрать имя переменной;
О объявить переменную как строковую (типа String);
О задать имя переменной.
Давайте создадим простую строковую переменную с именем strName. Префикс str обычно говорит о том, что переменная имеет строковый тип. Он может пригодиться во время отладки, если вы не уверены, к какому типу относится переменная. Следующим шагом должно стать объявление строковой переменной. Для объявления переменных используется ключевое слово Dim:
Dim strName as String
При объявлении для переменной выделяется область памяти. Visual Basic резер-нпруетдостаточно памяти, чтобы в ней поместился объект соответствующего типа. Наконец, строке можно присвоить значение:
strName = "Jane"
Если строке присваивается непосредственное значение, его следует заключить в кавычки. Если этого не сделать, Visual Basic предполагает, что значение strName хранится в переменной с именем Jane.
Присвоив переменной значение, вы сможете воспользоваться им для дальнейших вычислений, например передать его в качестве параметра процедуры или присвоить элементу на форме:
Form1.Caption = strName
Следующимпример поможет лучше понять сказанное:
1. Создайте новый проект командой File > New Project.
2. Дважды щелкните на форме Form1 в конструкторе форм, чтобы открыть окно программы.
3. Выберите из списка Events окна программы событие Click формы.
4. Добавьте в процедуру события Click следующий фрагмент:
Private Sub Form_Click()
Dim msg As String
msg = "Привет!"
Caption = msg
End Sub
5. Запустите программу командой Run > Start.
6. Щелкните на форме и проследите за изменением заголовка.
Мы рассмотрели простейший пример использования строковых переменных в приложении. Во время чтения этой книги вам предстоит увидеть множество других, менее тривиальных примеров.
Если вы забываете объявлять свои переменные, попробуйте форсировать явное объявление всех переменных — включите строку Option Explicit в секцию (General) (Declarations) окна программы вашей формы. Эту же строку можно включать в аналогичную секцию всех создаваемых форм и стандартных модулей Visual Basic (.BAS).
ПОДСКАЗКА
Чтобы форсировать явное объявление переменных во всех модулях, выполните команду Tools > Options. Установите флажок Require Variable Declaration на вкладке Editor диалогового окна Options (рис. 7.3). После этого Visual Basic будет автоматически вставлять строку Option Explicit в секцию (General) (Declarations) каждого создаваемого модуля.
Puc. 7.3. Диалоговое окно Options
Целые переменные
Целый тип также принадлежит к фундаментальным типам данных. Целые переменные отчасти похожи на байтовые, но они могут иметь знак (то есть быть положительными или отрицательными) и принадлежат интервалу от -32 768 до 32 767. Целый тип удобен для простых вычислений, при которых значения заведомо остаются целочисленными величинами. Кроме того, целые переменные часто используются в качестве счетчиков.
Мы рассмотрим работу с целыми переменными на следующем примере:
1. Создайте новый проект.
2. Создайте на форме кнопку Задайте ее свойству Name значение cmdPush, а свойству Caption — значение Нажми.
3. Дважды щелкните на кнопке, чтобы открыть окно программы.
4. Добавьте следующий фрагмент в процедуру события Click кнопки:
Dim A As Integer
Dim В As Integer
А = 2
В = А + 1
Print В
5. Запустите программу и нажмите кнопку.
На рис. 7.4 показано окно программы с приведенным выше фрагментом.
Рис. 7.4. Окно программы для примера
Последняя строка выводит на текущей форме значение переменной В, равное 3 (рис. 7.5).
Рис. 7.5. Окно приложения-примера
Другие примеры работы с целыми переменными встречаются как в этом уроке, так и в оставшейся части книги.
Логические переменные
Переменные логического типа могут иметь всего два значения — True и False. Чаще всего они применяются для «включения» или «выключения» некоторого признака или условия в программе. Логические переменные нередко используются для возврата логических значений из вызываемых функций. Код возврата равен True, если работа функции завершилась успешно, и False — в случае неудачи. Мы воспользуемся логическим типом для написания функции, которая определяет, существует ли на диске файл с заданным именем:
1. Создайте новый проект командой File > New Project.
2. В окне Project Wizard выберите значок Standard EXE.
3. Создайте на форме Form1 текстовое поле и задайте его свойству Name значение txtFilename.
4. Очистите свойство Caption текстового поля — для этого следует дважды щелкнуть на свойстве Caption в окне свойств и удалить текст Textl.
5. Создайте на форме кнопку. В окне свойств задайте ее свойству Name значение
cmdSearch, а свойству Caption — значение &Search.
6. Дважды щелкните на форме Form1, чтобы открыть окно программы.
7. Введите в окне программы исходный текст функции IsFile:
Private Function IsFile(Filename As String) As Boolean
If Len(Dir$(Filename)) > 0 Then
IsFile = True
Else
IsFile = False
End If
End Function
8. Выберите строку cmdSearch из раскрывающегося списка объектов (в левой верхней части окна программы). При этом будет автоматически выбрано событие Click.
9. Добавьте следующий фрагмент в процедуру события Click кнопки cmdSearch:
Private Sub cmdSearch_Click()
Dim filename As String
Dim rc As Boolean
filename = txtFilename.Text
rc = IsFile(filename)
If rc = True Then
MsgBox "Файл существует!"
Else
MsgBox "Файл не найден!"
End If
End Sub
10.Запустите программу.
Чтобы проверить, как работает написанная функция, введите в текстовом поле имя файла. Если файл существует, IsFile возвращает логическое значение True, в противном случае возвращается False. Обратите внимание на использование строковой переменной filename, передаваемой в качестве параметра функции IsFile. Значение filename задается в процедуре события Click кнопки cmdSearch.
ПОДСКАЗКАЧтобы проверить, существует ли на диске файл с заданным именем, можно воспользоваться функцией Dir$(), вложенной в функцию Len(), — например Len(Dir$(filename)). Результат будет положительным, если файл существует, и равным 0 в противном случае. Функция наподобие IsFile из предыдущего примера позволяет немного упростить проверку.
Универсальные переменные
Универсальные переменные могут принимать любое значение (целое, байтовое, строковое или логическое) и преобразовывать его в любой тип. Если переменная используется без явного объявления оператором Dim, Visual Basic считает, что она относится к универсальному типу.
Универсальный тип данных на первый взгляд кажется удобным, но я должен предупредить вас: пользуйтесь им лишь в тех случаях, когда у вас нет другого выбора. Универсальные переменные медленно работают, поскольку Visual Basic вынужден тратить время на их интерпретацию. К тому же они понапрасну расходуют память — под универсальную переменную выделяется область, достаточная для хранения строки, даже если на самом деле требуется всего один байт.
ВНИМАНИЕПо возможности старайтесь избегать универсального типа — вы можете запутаться в типах данных и внести в программу ошибки. Кроме того, универсальные переменные затрудняют процесс отладки.