Основные типы данных в системе Visual Basic
Опубликовано admin в Ср, 01/06/2010 - 00:12
Типы данных в VB-программах устанавливаются одним из четырех способов:
- явно при непосредственном объявлении тех или иных переменных, например — Dim X As Integer, k As Long, F1 As String;
- явно с помощью спецсимвола, завершающего имя переменной, например — X%, k!, F1$;
- неявно — путем определения интервала букв, с которых могут начинаться имена переменных, не объявленные явным образом. Например — DefInt I-N, DefStr S,V, DefDbl X-Z;
- неявно — путем объявления без указания типа (Dim Alpha, Beta) или включения в программу без какого-либо объявления. В любом случае такие данные относятся к типу Variant;
Перечень служебных слов, определяющих типы данных, и набор соответствующих указаний о значении первого и последнего символа имени приведены в табл. 1.2.
В системе Visual Basic появились однобайтовые целые числа без знака (Byte), которые в ряде случаев позволят расположить в оперативной памяти массивы большего размера.
Условно целочисленные данные типа Currency ориентированы на обработку денежных сумм. По сути дела операции над этими данными выполняются как над целыми числами, а результат делится на 10000. Целая часть значений типа Currency представляет базовые денежные единицы (рубли, доллары, марки и др.), а дробная — мелкие (копейки, центы, пфенниги и др.).
Бейсик дольше других алгоритмических языков сопротивлялся введению логических переменных, хотя неявно использовал для этой цели нулевые (False) и ненулевые (True) целые числа. Теперь логические переменные вступили в свои законные права, и в программах можно использовать обычные логические выражения над логическими операндами.
Для решения задач, использующих календарные даты, предлагаются данные типа Date, подробно описанные в разделе Обработка календарных дат и временных интервалов.
Строки фиксированной длины объявляются с указанием точного количества символов, составляющих значение строки:
Dim S1 As String *20
Если присваиваемое значение содержит меньше 20 символов, то оно дополняется пробелами. При попытке присвоить переменной S1 слишком длинную цепочку символов, лишний хвост будет отрезан. Если в операторе Dim указание о максимальной длине отсутствует, то реальным ограничением сверху может стать лишь объем оперативной памяти.
Самым интересным изобретением системы Visual Basic являются универсальные данные типа Variant. Переменным этого типа можно присваивать значения любых типов кроме записей. Переменные типа Variant хранят информацию о типе и месте расположения текущего значения. Иногда текущее значение находится внутри поля, отведенного под переменную типа Variant. Как правило, это относится к значениям числового типа. В случае более сложных переменных, длина которых может изменяться во время работы программы, на поле переменной хранится ссылка на соответствующее значение. Значением переменной типа Variant может быть даже массив. Естественно, что операции над такими данными реализуются специальными подпрограммами, к большинству из которых пользователь напрямую не обращается. Более точно, переменные типа Variant представляют собой объекты класса данных, представленных связкой (тип, значение). Над этими данными определен довольно большой набор операций, методов и преобразований. И хотя универсальные данные позволяют делать много необычного, хранения таких значений связано с дополнительными затратами оперативной памяти, да и скорость выполнения операций оставляет желать лучшего.
Переменные типа Variant можно объявить и явно с указанием типа:
Dim Delta As Variant
Данные, представленные последовательностью полей со значениями фиксированного типа и больше известные под названиями структуры (терминология Си) или записи (терминология Паскаля), относятся к пользовательским типам данных (user-defined type). Описание шаблона структуры с именем Book в VB-программе может иметь вид:
Type Book
Title As String *40
Author As String *20
Year As Integer
Price As Single
End type
После такого описания можно объявить, например, переменные b1 и b2, имеющие структуру типа Book, и присвоить соответствующим полям нужные значения:
Dim b1 As Book, b2 As Book
b1.Title="Visual Basic 6.0: Разработка приложений"
b1.Author="А. Гарнаев"
b1.Year=2001
b1.Price=135.5
Массивы данных любого типа помимо памяти, занимаемой каждым элементом массива, требуют дополнительно 20 байт на общую шапку и по 4 байта на каждое измерение. Например, массив A, объявленный как Dim A(5,12) As Double, занимает 6*13*8 + 20 + 2*4 = 652 байта.
Таблица 1.2
| Тип данных | Длина, байт | Диапазон допустимых значений | По первой букве | Спец- символ |
| Целые числа | ||||
| Byte | 1 | от 0 до 255 | DefByte | |
| Integer | 2 | от -32768 до 32767 | DefInt | % |
| Long | 4 | от -2147483648 до 2147483647 | DefLng | & |
| Currency
(целые*10-4) |
8 | от -922337203685477.5808
до + 922337203685477.5807 |
DefCur | @ |
| Вещественные числа | ||||
| Single | 4 | от -3.4*1038 до-1.4*10-45 , 0
и от 1.4*10-45 до 3.4*1038 |
DefSng | ! |
| Double | 8 | от -1.8*10308 до -4.9*10-324, 0
и от 4.9*10-324 до 1.8*10308 |
DefDbl | # |
| Строки | ||||
| String
(фикс. длина) |
n | n — объявленная длина строки
(n <64 k) |
$ | |
| String
(перем. длина) |
10+m | m — текущая длина строки
(m<231-1) |
DefStr | $ |
| Логические данные | ||||
| Boolean | 2 | True или False | DefBool | |
| Календарные даты | ||||
| Date | 8 | от 1.01.100 до 31.12.9999 | DefDate | |
| Пользовательский тип данных (структуры, записи) | ||||
| Type | Сумма длин полей | Длина поля зависит от его типа | ||
| Указатели (ссылки) | ||||
| Object | 4 | Ссылка (адрес) на объект | DefObj | |
| Универсальный тип данных | ||||
| Variant (число) | 16 | любое число из диапазона Double | DefVar | |
| Variant (строка) | 22+m | m — текущая длина строки | DefVar | |
Для явного объявления типа кроме оператора Dim могут использоваться и другие операторы, например Private (при объявлении переменных, недоступных другим модулям), Public (при объявлении переменных, доступных другим модулям), Static (при объявлении локальных переменных, сохраняющих свои значения после выхода из процедуры).
Указание о типе данных (As ...) можно встретить при объявлении типа констант, типа параметров функций и подпрограмм, типа возвращаемого значения:
Const e As Single = 2.718
Function Square(x As Double) As Double
Последние версии Visual Basic сделали попытку приблизить Бейсик к общепринятому правилу других алгоритмических языков — обязательному описанию всех используемых переменных. Если в начале модуле встречается оператор Option Explicit, то все переменные данного модуля должны быть объявлены явно. Система может автоматически добавлять указанный оператор, если в окне Options (вызывается из меню Tools) на закладке Editor (рис.1.1) помечен режим Require Variable Declaration (Требуется Объявление Переменных).

Рис. 1.1 Режим обязательного описания переменных в VB
