На этом шаге мы рассмотрим особенности использования перечисляемых типов.
Перечисления позволяют программисту описывать новые типы данных, значения которых определяет сам программист.
Описание перечисляемого типа состоит из списка его элементов, заключенного в круглые скобки. Каждый из элементов представляет собой уникальный идентификатор:
type
Season = (Spring, Summer, Autumn, Winter);
WeekDay = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
В рамках блока, где объявлен перечисляемый тип, идентификаторы всех элементов перечисляемого типа интерпретируются как константы. Spring, Summer, Autumn и Winter представляют собой константы типа Season, a Mon, Tue, Wed, Thu, Fri, Sat и Sun - константы типа WeekDay. Здесь необходимо обратить внимание на то, что эти идентификаторы не являются строковыми константами и в кавычки не заключаются. Поскольку идентификаторы перечисляемого типа являются костантами для всего блока, где они объявлены, то описание одного и того же идентификатора в разных типах считается ошибкой. Так, при трансляции проекта, содержащего показанный ниже фрагмент, будет выдано сообщение об ошибке: Identifier redeclared: 'Mon':
type
WeekDay = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
WorkDay = (Mon, Tue, Wed, Thu, Fri);
type Digitals = (0,1,2,3,4,5,6,7,8,9); //Константы числового типа. //Константы символьного типа. DigSymbols = ('0', '1', '2' , '3', '4', '5', '6', '7', '8' ,'9'); //Константы строкового типа. WeekDay = ('Mon','Tue','Wed','Thu','Fri','Sat','Sun');
Так как перечисляемые типы являются порядковыми, то, соответственно, они перечислением своих элементов определяют упорядоченные наборы констант. Упорядочение констант в типе выполняется в соответствии с последовательностью, в которой перечисляются идентификаторы. Порядковый номер константы перечисляемого типа определяется ее позицией в списке идентификаторов при объявлении. Первая константа в списке имеет порядковый номер 0, вторая - номер 1, и т.д..
Так же, как и к переменным других порядковых типов, к переменным перечисляемого типа применимы встроенные функции Ord, Pred и Succ.
На следующем шаге мы рассмотрим интервальные типы.