Пользовательские типы

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

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

 

Формат записи:

Type

<имя типа> = (<значение 1, значение 2 ,..., значение n>);

Var

<идентификатор, ...>: <имя типа>;

Пример.

Type

Svet = (Red, Yellow, Green);

Move = (Left, Right, Up, Down);

 

Var

S1, S2, S3: Svet;

M: Move;

Season: (Winter, Spring, Summer, Autumn);

В данном примере приведены два явно описанных типа данных Svet и Move. Определены их значения – обозначения цветов и направлений движения. Переменные Svet, Move могут принимать одно из перечисленных значений. Попытка присвоить им любое другое значение вызовет программное прерывание. Третий тип перечисления анонимный (не имеет имени) и задается перечислением значений в разделе Var. Season является переменной этого типа и может принимать значения Winter, Spring, Summer и Autumn. Таким образом может быть задан любой тип, но это не всегда приемлемо, т.к. первый способ более соответствует характеру языка ТР.

Имена внутри круглых скобок являются константами соответствующего типа перечисления и соответствуют обычным правилам для констант. Эти идентификаторы должны быть уникальны в пределах блока.

 

Помни:

· Описание двух или более перечисляемых типов с совпадающими константами недопустимо.

 

Пример.

Type

Color1 = (Red, Yellow, Green);

Color2 = (Blue, Grey, Green);

являются некорректными из-за повторного использования идентификатора Green.

Перечисляемые типы являются дискретными типами. Над значениями перечисляемых типов определены операции сравнения: считается, что значения этого типа указаны в списке в порядке возрастания. Например, будет истинно выражение Red< Green, т.к. Red имеет меньший номер по порядку в описании типа, чем Green.

В отличие от данных других типов, ТР не поддерживает операции ввода–вывода значений пользовательского перечисляемого типа. При необходимости программист сам должен организовать ввод–вывод таких данных.

В языке ТР допускается образование ограниченных типов из перечисляемых по обычным правилам.

Интервальный тип (тип-диапазон) позволяет задавать две константы, определяющие границы диапазона значений для данной переменной. Компилятор при каждой операции с переменной интервального типа генерирует подпрограммы проверки, определяющие, остается ли значение переменной внутри установленного для нее диапазона.

Помни:

· Обе константы должны принадлежать одному из стандартных типов (тип real здесь недопустим).

· Значение первой константы должно быть обязательно меньше значения второй.

Формат записи:

Type

< имя типа > = <константа1> . . <константа2>;

Var

<идентификатор, ...> : < имя типа >;

 

Пример.

Type

Dni = 1 .. 31;

Var

X1, X2: Dni;

 

Переменные Х1 и Х2 могут принимать любые значения из диапазона 1 .. 31. Выход из диапазона вызывает программное прерывание.

Можно определить интервальный тип и более универсальным способом, задав границы диапазона не значениями констант, а их именами:

 

Const

Min = 1; Max = 31;

Type

Dni = Min .. Max;

Var

X1,X2 : Dni;