Типы данных
Как мы уже отмечали, язык – это знаковая система для передачи информации. Когда же мы говорим о языке программирования, то подразумеваем под информацией строго определенное понятие. В данном случае информация – это данные и процедуры их обработки. В этом разделе мы коснемся только первой части настоящего определения, а именно данных.
Данные в VBA характеризуются своими типами, которые определяют:
- формат представления данных в памяти компьютера;
- область возможных значений;
- множество допустимых операций, применимых к данным.
В свою очередь типы данных делятся на простые (встроенные и определяемые) и на структурные, именно в таком порядке мы и будем их описывать.
Итак, начнем с встроенных типов данных. Как и любой язык программирования высокого уровня, VBA содержит все привычные встроенные типы данных: арифметические, строковые и логические, но есть и свои типы, специфические для VBA. Полный перечень встроенных типов данных VBA с соответствующими областями значений и требуемой памятью приведен в табл. 20.2.
Таблица 20.2. Встроенные типы данных VBA.
Тип данных | Описание | Область значений | Требуемая память |
---|---|---|---|
Boolean | Логическое значение | True (Истина) и False (Ложь) | 2 байта |
Byte | Число без знака | 0-255 | 1 байт |
Currency | Десятичные числа с фиксированным количеством знаков после запятой | -922 337 203 685 477.5808-922 337 203 685 477.5807 | 8 байтов |
Date | Используется для хранения дат | 1.01.0100г.-31.12.9999г. | 8 байтов |
Decimal | Любое число | 28 знаков | 12 байт |
Double | Числовые значения с плавающей точкой двойной точности | -1.7Е308--4.9Е324 для отрицательных чисел и 4.9Е324-1.7Е308 для положительных чисел | 8 байтов |
Integer | Короткие целые числовые значения | -32 768-32 767 | 2 байта |
Long | Длинные целые числовые значения | -2 147483648-2147483647 | 4 байта |
Object | Ссылка на объект | 4 байта | |
Single | Числовые значения с плавающей точкой обычной точности | -3.4Е38--1.4Е45 для отрицательных чисел и 1.4Е-45-3.4Е-45 для положительных | 4 байта |
String | Используется для хранения строковых значений | Длина строки от 0 до 64 Кбайт | 1 байт на символ |
Variant | Может использоваться для хранения всех вышеперечисленных типов | Значения любого из вышеперечисленных типов плюс Null, Error, Empty, Nothing. | 16 байт плюс 1 байт на каждый символ строковых значений |
Если такие типы данных, как integer или string не требуют особых комментариев, поскольку они стандартны и просты, то типы данных object и variant следует прокомментировать. Про тип данных object мы отдельно поговорим в разделе "Классы и объекты", сейчас же рассмотрим уникальный в своем роде тип Variant.
Тип variant – это универсальный тип данных, позволяющий программисту не думать о том, каким будет тип переменных. С одной стороны, безусловное удобство: не надо думать при объявлении переменной, с другой – это может привести к ошибкам, которые трудно обнаружить. Более того, на обработку переменных данного типа тратится больше времени, да и память расходуется нерационально (особенно, когда речь идет о статических массивах данного типа).
Мы советуем (особенно начинающим программистам) не злоупотреблять данным типом, хотя ряд приемов его использования заметно упрощает программирование. Например, вы хотите, чтобы пользователь программы ввел целое число (после чего программа нарисует круг соответствующего радиуса) и переменную ввода целого типа. Но что, если пользователь введет вместо целого числа вещественное или, вообще, строковое значение? Произойдет ошибка при попытке присвоения переменной значения не того типа.
Вот тут-то и необходим тип Variant. Если переменная для ввода будет объявлена как variant, ничего страшного не случится: введенное значение бу дет благополучно присвоено этой переменной, а вы получите возможность проанализировать введенное значение и попросить пользователя повторить ввод, если введенное им значение не отвечает требуемым условиям. Теперь перейдем к разговору о третьей составляющей нашего определения типа данных, об операциях. Операция – это действие, выполняемое над данными.
[Результат
=
] операнд1
<операция>
операнд2