Перечислимый и диапазонный типы
Перечислимый тип определяется упорядоченным набором идентификаторов.
type typeName = (value1, value2, ..., valuen);
Значения перечислимого типа занимают 4 байта. Каждое значение value
представляет собой константу типа typeName
, попадающую в текущее
пространство имен.
Например:
type
Season = (Winter,Spring,Summer,Autumn);
DayOfWeek = (Mon,Tue,Wed,Thi,Thr,Sat,Sun);
К константе перечислимого типа можно обращаться непосредственно по имени, а
можно использовать запись typeName.value
, в которой имя константы
уточняется именем перечислимого типа, к которому она принадлежит:
var a: DayOfWeek;
a := Mon;
a := DayOfWeek.Wed;
Значения перечислимого типа можно сравнивать на <:
DayOfWeek.Wed < DayOfWeek.Sat
Для значений перечислимого типа можно использовать функции Ord
,
Pred
и Succ
, а также процедуры Inc
и
Dec
. Функция Ord
возвращает порядковый номер значения в списке
констант соответствующего перечислимого типа, нумерация при этом начинается с
нуля.
Для перечислимого типа определена экземплярная
функция ToString
, возвращающая строковое представление переменной
перечислимого типа. При выводе значения перечислимого типа с помощью процедуры write
также выводится строковое представление значения перечислимого типа.
Например:
type Season = (Winter,Spring,Summer,Autumn);
var s: Season;
begin
s := Summer;
writeln(s.ToString); // Summer
writeln(s); // Summer
end.
Диапазонный тип представляет собой подмножество значений целого, символьного
или перечислимого типа и описывается в виде a..b
, где a
- нижняя, b
- верхняя граница
интервального типа, a
<b
:
var
intI: 0..10;
intC: 'a'..'z';
intE: Mon..Thr;
Тип, на основе которого строится диапазонный тип, называется базовым для этого диапазонного типа. Значения диапазонного типа занимают в памяти столько же, сколько и значения соответствующего базового типа.