Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Delphi_1курс лекции / Пр 2 Типы данных.doc
Скачиваний:
49
Добавлен:
23.03.2015
Размер:
211.46 Кб
Скачать

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

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

Пусть, например, в программе должна быть переменная Mode, в которой зафиксирован один из возможных режимов работы приложения: чтение данных, их редактирование, запись данных. Можно, конечно, дать переменной Mode тип Word и присваивать этой переменной в нужные моменты времени одно из трех условных чисел: 0 - режим чтения, 1 - режим редактирования, 2 - режим записи. Тогда программа будет содержать операторы вида

if (Mode = 1) then ...

Через некоторое время уже забудется, что означает значение Mode, равное 1, и разбираться в таком коде будет очень сложно. А можно поступить иначе: определить переменную Mode как переменную перечислимого типа и обозначить ее возможные значения как mRead, mEdit, mWrite. Тогда приведенный выше оператор изменится следующим образом:

if (Mode = mEdit) then ...

Конечно, такой оператор понятнее, чем предыдущий.

Переменная перечислимого типа может определяться предложением вида:

var <имя переменной> : (<значение 1>, ..., < значение n>);

Например

var Mode : (mRead, mEdit, mWrite);

Если переменная определена так, то ей можно присваивать указанные значения, можно проверять ее величину, сравнивая с возможными значениями. Кроме того, надо учитывать, что перечислимые типы относятся к целым порядковым типам и к ним применимы любые операции сравнения (>, < и т.п.), а также процедуры и функции, определенные для порядковых типов.

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

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

Тогда можно ввести в программе несколько переменных этого типа. Например:

type TMode : (mRead, mEdit, mWrite);

var Mode1, Mode2 : TMode;

Ограниченные типы

Для порядковых типов можно задать поддиапазон их возможных значений для вводимого вами типа или переменной - это и будет ограниченный тип. Задается диапазон значений ограниченного типа выражением вида

<минимальное значение>..<максимальное значение>

Например:

var Letter : 'a'..'z';

Num : 1..12;

type Caps = 'A'..'Z';

В этих примерах переменная Letter может принимать только символы латинских букв в нижнем регистре, переменная Num - только целые числа в диапазоне 1 12 (это могут быть, например, номера месяцев), переменные, чей тип будет объявлен как Caps будут принимать только символы латинских букв в верхнем регистре.

Ограниченные типы используются, например, при объявлениях размеров массивов. Но они могут использоваться и самостоятельно. В компиляторе Object Pascal имеется опция, позволяющая включить проверку диапазона при присваивании значения переменной ограниченного типа. Это опция {$R+}. Вы можете ее включить в том месте вашей программы, где вы хотите начать проверку диапазона, и выключить проверку, где захотите, опцией {$R-}. Можно также включить опцию проверки в окне Project Options на странице Compiler. Это надежнее, так как опция {$R+} срабатывает только при ошибках диапазона, очевидных для компилятора, а установка опции проверки диапазона в окне Project Options действует в процессе выполнения (в режиме отладки) и при попытке присвоить переменной ограниченного типа значение, выходящее за пределы заданного поддиапазона, генерирует сообщение "Range check error".

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

При использовании в объявлении ограниченного типа константных выражений возможны некоторые ошибки компилятора. Например, объявления

const

Х=100;

Y=200;

type

Scale = (X + Y) div 2..Y;

вызовут сообщение компилятора об ошибке, поскольку, если после знака равенства в объявлении типа следует скобка, то компилятор считает, что описывается перечислимый тип. Чтобы избежать такой ошибки, приведенные выше объявления можно заменить следующими:

const

Х=100;

Y=200;

type

Scale = 1 * (X + Y) div 2 . . Y ;

Соседние файлы в папке _Delphi_1курс лекции