Delphi. Урок 17. Типы

A

AngelOfLove

Для того чтобы создать свой собственный тип переменной, необходимо сначала его объявить. В Delphi делается это внутри раздела type:

1 type
2 TForm1 = class(TForm)
3 procedure FormCreate(Sender: TObject);
4 private
5 { Private declarations }
6 public
7 { Public declarations }
8 end;

Внутри раздела type в стандартных проектах Delphi уже существует тип TForm1. Однако к рассмотрению подобных типов, которые также называются классами, мы перейдем в следующем уроке. В этом уроке мы научимся создавать более простые типы данных.

Простейший собственный тип данных
Для примера того, как нужно объявлять типы данных, давайте создадим самый простейший тип. Он будет представлять дубликат какого-либо другого типа. Укажем его сразу после объявления типа TForm1, т.е. после ключевого слова end, который указывает на завершение описания этого типа. Создается наш собственный тип вот таким образом:

1 TMyArray = array [1..100] of integer;
Т.е. в целом раздел type будет выглядеть следующим образом:

1 type
2 TForm1 = class(TForm)
3 procedure FormCreate(Sender: TObject);
4 private
5 { Private declarations }
6 end;
7 TMyArray = array [1..100] of integer;


Мы только что создали свой тип под названием TMyArray, который представляет собой обыкновенный массив сотни целочисленных переменных. Теперь, если мы захотим объявить какой-либо массив, мы можем не указывать эту длинную запись «array [1..100] of integer», а укажем «TMyArray»:

1 var
2 a: TMyArray;

Этот прием очень удобно использовать, когда требуется объявить одинаковый массив в нескольких участках кода, т.е. много раз. В качестве представляемого типа данных может выступать абсолютно любой тип. Будь то integer, double, string, array и т.п. Итак, мы рассмотрели простейший пример создания типа. Перейдем к более сложным примерам.

Записи
Записями record называют более сложные типы, которые могут включать в себя некоторое количество полей. Полями мы будем называть переменные, которые будут входить в состав записи. Создадим запись TBook, в которой опишем какие-либо характеристики, связанные с книгой:

1 type
2 TBook = record
3 Title, Author: string;
4 PagesCount: integer;
5 Price: integer;
6 end;

В данном случае Title, Author, PagesCount и Price являются полями типа TBook и описывают какие-то свойства, значения, которые характерны только для типа TBook. Т.е. по сути запись представляет собой совокупность нескольких переменных. Этот тип данных очень удобно использовать тогда, когда мы хотим как-то структурировать данные в нашем коде. Создание переменной TBook будет выглядеть также, как и создание переменной любого другого типа:

1 var
2 a: TBook;

И теперь мы можем обращаться к тем самым полям записи достаточно просто:

1 a.Title := 'Уроки Delphi для начинающих';
2 a.Author := 'zhk.su';
3 a.PagesCount := 1000;
4 a.Price := '100';

Т.е. мы сначала указываем имя переменной, затем ставим точку и указываем поле нашего типа. Работать с этими полями мы будем абсолютно также, как и с обычными переменными. Для примера мы можем создать тип TBooks, который будет описывать массив книг TBook:

1 type
2 TBooks = array [1..100] of TBook;

Тогда мы сможем обращаться к каждому полю отдельно взятой книги, например так:

1 var
2 Books: TBooks;
3 ...
4 for i := 1 to 100 do
5 Books.Title := 'Book #' + IntToStr(i); // Присвоим сотне книг имена

Поля записей также могут иметь абсолютно любой известный тип, но

Необходимо учитывать правильный порядок объявления типов. Если тип A используется при объявлении типом B, то тип A обязательно должен быть описан ДО описания типа B. В противном случае (т.е. если тип A будет указан после B в разделе type) компилятор скажет, что он не знает про тип A, который используется при объявлении типа B.

В качестве типа поля может выступать даже тип самой записи, например, чтобы один какой-то объект мог содержать информацию о другом каком-то объекте того же типа. Более подробно о полях мы будем говорить при рассмотрении классов и объектно-ориентированного программирования, т.к. там они имеют гораздо больше функционала, нежели в записях.


Перечисляемые типы
Перечисляемые типы достаточно просты. Они представляют собой типы таких переменных, которым могут быть присвоены только определенные значения. Например, объявим перечисляемый тип TOperatingSystem:

1 type
2 TOperatingSystem = (OSWindows, MacOS, Ubuntu, IOS, Android);

Теперь всем переменным типа TOperatingSystem могут быть присвоены только значения OSWindows, MacOS, Ubuntu, IOS и Android:

1 var MyOS: TOperatingSystem;
2 ...
3 MyOS := OSWindows;

Такие типы также могут являться полями записей, да и вообще:

Абсолютно любой тип может использоваться при описании другого типа. Исключение составляют только те типы, которые описаны после описания данного типа. Их в данном типе мы использовать не можем, т.к. их просто не увидит компилятор.
 
Похожие темы
A Delphi. Урок 14. Работа со списками строк TStringList или «сложные» типы Программирование 0
A Delphi. Урок 16. Исключительные ситуации Программирование 0
A Delphi. Урок 15. Математические операции Программирование 0
A Delphi. Урок 13. Работа со строками Программирование 0
A Delphi. Урок 12. Преобразование числа в строку и строки в число Программирование 0
A Delphi для начинающих. Урок 11. Процедуры и функции Программирование 0
A Delphi для начинающих. Урок 10. Циклы. Работа с массивами Программирование 0
A Delphi для начинающих – Урок 9 – Массивы Программирование 0
A Delphi для начинающих – Урок 8 – Условия. Оператор Case Программирование 0
A Delphi для начинающих – Урок 7 – Условия. Оператор IF Программирование 0
A Delphi для начинающих – Урок 6 – Пишем свой калькулятор Программирование 0
A Delphi для начинающих – Урок 5 – Работаем с компонентами Программирование 0
A Delphi для начинающих – Урок 4 – Работа с переменными Программирование 0
A Delphi для начинающих – Урок 3 – Создание переменных Программирование 0
A Delphi для начинающих – Урок 2 — События Программирование 0
A Delphi для начинающих — Урок 1 — Среда разработки Delphi Программирование 0
M [Delphi] Работа VKAPI, на примере бота Программирование 3
T Пишем WinLocker на Delphi Программирование 0
D Нужна помощь по Delphi! ЗАПЛАЧУ! Программирование 1
A Потоки в Delphi. TThread Программирование 0
A Простые шутку в DELPHI Программирование 5
A Мои старые исходники на Delphi Программирование 1
A Несколько шпор по Delphi =) Программирование 3
L Загружаем компьютер другу. Delphi,rad studio Программирование 0
I Country IP Ranges Generator v1.0 [Source][Delphi] Программирование 3
B Помощь [Delphi] Программирование 0
B VK Post Grabber [Source][Delphi] Программирование 0
Admin [delphi] downloader winapi Программирование 0
Support81 Урок не выучен: Onyx теряет $3,8 млн из-за старой уязвимости Новости в сети 0
X Изучение Си (урок 6) Программирование 1
X Изучение Си (урок 5) Программирование 0
X Изучение Си (урок 4) Программирование 0
X Изучение Си (урок 3) Программирование 0
X Изучение Си (урок 2( Программирование 0
X Изучение Си (урок 1) Программирование 1
Ж HTML/CSS, Урок 2 Программирование 3
Ж Садись присаживайся, курс по HTML/CSS, урок 1 Программирование 1
K Уроки по XSS: Урок 3. Контексты внедрения XSS Уязвимости и взлом 0
K Уроки по XSS: Урок 2. Скрытая передача данных, перехват нажатия клавиш, изменение внешнего вида сайта, подцепление на BeEF, фишинг, подсказки обхода ф Уязвимости и взлом 0
K Уроки по XSS: Урок 1. Основы XSS и поиск уязвимых к XSS сайтов Уязвимости и взлом 0
wrangler65 Введение в мир хакерских атак: история, типы и защита Полезные статьи 0
GhosTM@n Интересно Что такое пентест и типы? Уязвимости и взлом 0

Название темы