Типы данных
Любая операция имеет результат и несколько операндов (как правило, два). Операнд – это элемент данных, участвующий в операции. Для каждой операции определены типы данных операндов, для которых она имеет смысл и по которым определяется тип результата. Естественен вопрос: по какому именно правилу определяется тип результата, ведь в качестве операндов могут быть операнды разных типов? Для ответа на этот вопрос необходимо ввести определение приведения. Приведение – это (автоматическое) преобразование значения одного типа в эквивалентное значение другого типа. Конечно, не всякое приведение возможно, т. е. не всегда можно сделать именно эквивалентное преобразование. Например, целое число 3 можно преобразовать в вещественное число 3.0 и значение сохранится, но вещественное число 3.1415926 нельзя преобразовать в целое, не потеряв информацию. Таким образом, учитывая приведения типов, можно однозначно определять тип результата операции по следующему правилу: если операция применяется к операндам различных типов, то операнд, у которого порядок типа ниже, преобразуется к типу операнда, у которого порядок выше и значение операции будет иметь, соответственно, тип высшего порядка. Существует четыре вида операций:
- Арифметические (+, – , *, \, /, ^, mod).
- Логические (not, and, or, xor, eqv, imp).
- Строковые (+,&).
- Операции отношения (=, <>, <, >, <=, >=, Is, Like).
Итак, мы описали встроенные типы данных. Но вспомним, что сам по себе тип – это просто характеристика данных, значимой же величиной являются сами данные. Первым шагом на пути работы с данными будет их объявление и инициализация, о которых сейчас и пойдет речь. После того как были описаны типы данных, необходимо приступать к работе с данными, т. е. к программированию. По существу эта работа делится на два этапа – на объявление переменных и на составление процедур обработки этих переменных.
Переменная – это элемент данных в программе, которому присвоено имя Значение переменной может задаваться и изменяться программой (переменная – не константа), но в соответствии с определенным типом данной переменной, который задается при ее объявлении. При объявлении задается имя (для идентификации переменной в программе), затем объявляется ее тип (для определения возможных значений переменной и способов ее обработки), а также определяется область видимости этой переменной.
Явное объявление простых переменных имеет следующий синтаксис:
{
Dim
|
Private
|
Public
|
Static
} имя Переменной [
As
<типДанных>]
[, имяПеременной [
As
<типДанных>]]...
Рассмотрим первую часть объявления – объявление области видимости переменной при помощи соответствующих ключевых слов. К сожалению, что такое область видимости переменной и время ее жизни, нельзя объяснить без специальных понятий и определений, которые будут приведены в разделе "Структура программы". Поэтому мы не будем подробно останавливаться на этом вопросе, кроме разве мелких замечаний. Более того, данные ключевые слова несут локальную нагрузку на семантику конструкций и их пропуск при описании ни на чем не скажется.
Следующая часть объявления – это имя переменной. Правила составления имен уже достаточно подробно обсуждались в разделе "Общие сведения", и мы не будем еще раз останавливаться на этом.
И наконец, последнее, что необходимо сделать при явном объявлении переменной, – указать ее тип, используя ключевое слово Аs, после которого идет ключевое слово, определяющее тип данных, например integer.
Помимо явного способа объявления переменной, существуют и неявные. Во-первых, можно непосредственно в имени переменной указать ее тип, добавив в конец имени специальный символ (например, $ – строка). А во-вторых, можно вообще не использовать операторы объявления, а при необходимости прямо на месте неявно вводить переменную. Например, можно сразу написать оператор d = 5. В данном случае не было предварительного (явного) объявления переменной, но все-таки она будет проинициализирована. Дело в том, что по умолчанию VBA расценивает данную переменную как нестатическую типа variant. Приведем теперь программу объявления переменных.
Программа 20.3. Объявление переменных.
Dim
str
As
String
, Var = 123.456
Dim
str$, k&
Кстати, помимо явной инициализации переменных, например pi = 3.14, существует инициализация по умолчанию. То есть, когда вы объявляете переменную и не инициализируете ее, ей присваивается значение по умолчанию, так, например, для числовых типов это значение равно 0.
Помимо переменных, чьи значения могут меняться по ходу программы, можно использовать именованные константы. Константа – это элемент данных, не меняющий своего значения. Синтаксис объявления констант практически ничем не отличается от объявления переменных.
[
Public
|
Private
]
Const
имяКонстанты [
As
ТипДанных] = выражение
Ключевые слова Public и Private имеют такой же смысл, как и в случае с переменными. Отсутствие этих ключевых слов и описание константы внутри процедуры объявляет ее как локальную, использование же их, наоборот, объявляет ее как открытую или закрытую глобальную константу. Задание имени и типа данных аналогично случаю с переменными.
Выражение – это любое значение или формула, возвращающая значение, используемое в качестве константы. Например, мы хотим ввести константу, значением которой будет площадь – const squares = 20000. Или в виде формулы (зная длину и ширину):
Const
lengths = 200
Const
widths = 100
Const
squares = length * width
Совет
Рекомендуется давать константам осмысленные имена и описывать их в самом начале модуля, а затем использовать всюду только именованные константы. Это делает программу не только понятнее, но и проще в сопровождении и отладке. Зачастую значение той или иной константы требуется изменить (хотя бы на время отладки), и тогда достаточно поменять лишь одно значение в описании константы. Если же в тексте программы использовалось непосредственно значение, то изменить все его вхождения намного сложнее.