Типы данных
Программа 20.5. Объявление перечисляемого типа.
Enum
Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
End
Enum
Sub
Weekend()
Dim
day
As
Week
Day = Saturday
End
Sub
После описания простейшего структурного типа данных (массива) перейдем к более сложному типу, а точнее, к типу, определяемому пользователем. В то время как массив представляет собой совокупность однотипных переменных, хотелось бы создать объединение элементов разных типов (запись).
Например, мы могли бы описать человека при помощи массива целых чисел: Dim Person () As Integer, где Person (1) задает рост, Person (2) – Вес, Person(3) – объем грудной клетки и т. д. Но это все элементы одного типа integer, а как же быть когда мы захотим определить не менее важный параметр человека – его имя, имеющее тип string, или дату рождения типа Date? Решением является создание записи. В нашем случае это будет выглядеть следующим образом: мы создаем пользовательский тип данных Person, элементами которого являются значения разных типов. Обращение же к таким переменным строится следующим образом: Person › Weight или Person › Name.
Конечно, перечисляемый тип тоже определяется пользователем, но это простой тип данных.
После небольшого введения дадим точное определение записи и синтаксиса определения пользовательского типа. Запись – это структурированный тип данных, компоненты которого обычно называются полями, имеют имя и могут принадлежать к различным типам данных.
[
Private
|
Public
] Type имяТипа
имяПоля [([<размер>]}]
As
типДанных [имяПоля [ ([<размер>]) ]
As
типДанных]
End
Type
Исходя из синтаксической конструкции, сразу можно сказать, что тип определяется либо на уровне модуля, либо на уровне приложения. Далее идет ключевое слово туре и собственно имя типа. После этого идет объявление полей нового типа. Это могут быть простые переменные и массивы встроенных типов, а также переменные и массивы уже определенных типов пользователя, которые в свою очередь могут иметь любую вышеуказанную структуру.
Для тех, кого последнее предложение заставило задуматься, небольшое пояснение. Определение записи можно рассматривать как дерево. Корень – это имя типа, а вершины – имена полей, которые могут являться корнями подобного же дерева. Не допускается использование рекурсивных определений, т. е. нельзя объявить тип следующим образом:
Type Заяц
Волк
As
Заяц
End
Type
В приведенной ниже программе мы объявляем тип Person, имеющий поля name (имя) и birthday (дата рождения) простых типов. Далее мы объявляем тип Book, имеющий поле author определенного выше типа Person, поле title (название книги) типа string и поле content (названия глав книги), представляющее собой динамический массив типа string. После объявления типов мы объявляем одномерный массив типа Book и полностью инициализируем второй элемент массива, используя для доступа к полям записей точечную нотацию. Небольшой нюанс при инициализации поля content: поскольку это динамический массив, его необходимо переопределить. В конце просто выводится название одной из глав книги.
Программа 20.6. Объявление типов.
Public
Type Person
name
As
String
birthday
As
Date
End
Type
Public
Type Book
author
As
Person
title
As
String
content() as
String
End
Type
Sub
TypeExample()
Dim
arrBook(l)
As
Book
arrBpok(1).author.name =
"Федор Новиков"
arrBook(l).author.birthday = #10/10/1951#
arrBook(l).title =
"Microsoft Office 2001 в целом"
ReDim
arrBook(1).content(0
To
1)
arrBook(1).content(0) =
"Введение"
MsgBox(arrBook(1).content(0))
End
Sub