Пропустить навигацию.
Главная

Основные типы данных в системе Visual Basic

Типы данных в 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 (Требуется Объявление Переменных).

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

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