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

Уроки для начинающих   15 февраля 2013  Автор статьи: admin 
geekbrains.ru/

В этом уроке мы рассмотрим одну из ключевых возможностей языков программирования — создание собственных типов данных.
Для того чтобы создать свой собственный тип переменной, необходимо сначала его объявить. В Delphi делается это внутри раздела type:
[cc lang=»delphi»]type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;[/cc]
Внутри раздела type в стандартных проектах Delphi уже существует тип TForm1. Однако к рассмотрению подобных типов, которые также называются классами, мы перейдем в следующем уроке. В этом уроке мы научимся создавать более простые типы данных.

Простейший собственный тип данных

Для примера того, как нужно объявлять типы данных, давайте создадим самый простейший тип. Он будет представлять дубликат какого-либо другого типа. Укажем его сразу после объявления типа TForm1, т.е. после ключевого слова end, который указывает на завершение описания этого типа. Создается наш собственный тип вот таким образом:
[cc lang=»delphi»]TMyArray = array [1..100] of integer;[/cc]
Т.е. в целом раздел type будет выглядеть следующим образом:
[cc lang=»delphi»]type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TMyArray = array [1..100] of integer;[/cc]
Мы только что создали свой тип под названием TMyArray, который представляет собой обыкновенный массив сотни целочисленных переменных. Теперь, если мы захотим объявить какой-либо массив, мы можем не указывать эту длинную запись «array [1..100] of integer», а укажем «TMyArray»:
[cc lang=»delphi»]var
a: TMyArray;[/cc]
Этот прием очень удобно использовать, когда требуется объявить одинаковый массив в нескольких участках кода, т.е. много раз. В качестве представляемого типа данных может выступать абсолютно любой тип. Будь то integer, double, string, array и т.п. Итак, мы рассмотрели простейший пример создания типа. Перейдем к более сложным примерам.

Записи

Записями record называют более сложные типы, которые могут включать в себя некоторое количество полей. Полями мы будем называть переменные, которые будут входить в состав записи. Создадим запись TBook, в которой опишем какие-либо характеристики, связанные с книгой:
[cc lang=»delphi»]type
TBook = record
Title, Author: string;
PagesCount: integer;
Price: integer;
end;[/cc]
В данном случае Title, Author, PagesCount и Price являются полями типа TBook и описывают какие-то свойства, значения, которые характерны только для типа TBook. Т.е. по сути запись представляет собой совокупность нескольких переменных. Этот тип данных очень удобно использовать тогда, когда мы хотим как-то структурировать данные в нашем коде. Создание переменной TBook будет выглядеть также, как и создание переменной любого другого типа:
[cc lang=»delphi»]var
a: TBook;[/cc]
И теперь мы можем обращаться к тем самым полям записи достаточно просто:
[cc lang=»delphi»]a.Title := ‘Уроки Delphi для начинающих’;
a.Author := ‘Cybern.ru’;
a.PagesCount := 1000;
a.Price := ‘100’;[/cc]
Т.е. мы сначала указываем имя переменной, затем ставим точку и указываем поле нашего типа. Работать с этими полями мы будем абсолютно также, как и с обычными переменными. Для примера мы можем создать тип TBooks, который будет описывать массив книг TBook:
[cc lang=»delphi»]type
TBooks = array [1..100] of TBook;[/cc]
Тогда мы сможем обращаться к каждому полю отдельно взятой книги, например так:
[cc lang=»delphi»]var
Books: TBooks;

for i := 1 to 100 do
Books[i].Title := ‘Book #’ + IntToStr(i); // Присвоим сотне книг имена[/cc]
Поля записей также могут иметь абсолютно любой известный тип, но
[warning]Необходимо учитывать правильный порядок объявления типов. Если тип A используется при объявлении типом B, то тип A обязательно должен быть описан ДО описания типа B. В противном случае (т.е. если тип A будет указан после B в разделе type) компилятор скажет, что он не знает про тип A, который используется при объявлении типа B.[/warning]
В качестве типа поля может выступать даже тип самой записи, например, чтобы один какой-то объект мог содержать информацию о другом каком-то объекте того же типа. Более подробно о полях мы будем говорить при рассмотрении классов и объектно-ориентированного программирования, т.к. там они имеют гораздо больше функционала, нежели в записях.

Перечисляемые типы

Перечисляемые типы достаточно просты. Они представляют собой типы таких переменных, которым могут быть присвоены только определенные значения. Например, объявим перечисляемый тип TOperatingSystem:
[cc lang=»delphi»]type
TOperatingSystem = (OSWindows, MacOS, Ubuntu, IOS, Android);[/cc]
Теперь всем переменным типа TOperatingSystem могут быть присвоены только значения OSWindows, MacOS, Ubuntu, IOS и Android:
[cc lang=»delphi»]
var MyOS: TOperatingSystem;

MyOS := OSWindows;[/cc]
Такие типы также могут являться полями записей, да и вообще:
[tip]Абсолютно любой тип может использоваться при описании другого типа. Исключение составляют только те типы, которые описаны после описания данного типа. Их в данном типе мы использовать не можем, т.к. их просто не увидит компилятор.[/tip]

Научиться программировать

  • на Delphi

  • на Java

  • на C++

geekbrains.ru/
geekbrains.ru/