В стандартном Паскале процедуры и функции рассматриваются
только как части программы, которые можно выполнять с помощью вы-
зова процедуры или функции. В Borland Pascal процедуры и функции
трактуются гораздо шире: здесь допускается интерпретация процедур
и функций, как объектов, которые можно присваивать переменным и
передавать в качестве параметров. Такие действия можно выполнять
с помощью процедурных типов.
В описании процедурного типа задаются параметры, а для функ-
ции - результат функции.
процедурный тип
│
│ ┌─────────┐
└┬>│procedure├─┬───────────────────────────────────────────────>
│ └─────────┘ │ ┌────────────────────────────┐ ^ ^
│ └─>│список формальных параметров├─┘ │
┌┘ └────────────────────────────┘ └─┐
│ ┌────────┐ ┌───┐ ┌─────────┐│
└>│function├┬────────────────────────────────>│ : ├>│результат├┘
└────────┘│ ┌────────────────────────────┐^ └───┘ └─────────┘
└>│список формальных параметров├┘
└────────────────────────────┘
Характерно, что синтаксис записи процедурного типа в точнос-
ти совпадает с записью заголовка процедуры или функции, только
опускается идентификатор после ключевого слова procedure или
function. Приведем некоторые примеры описаний процедурного типа:
type
Proc = procedure;
SwapProc = procedure(var X, Y: Integer);
StrProc = procedure(S: String);
MathFunc = function(X: Real): Real;
DeviceFunc = function(var F: text): Integer;
MaxFunc = function(A, B: Real; F: MathFunc): Real;
Имена параметров в описании процедурного типа играют чисто
декоративную роль - на смысл описание они не влияют.
Borland Pascal не позволяет описывать функции, которые возв-
ращают значения процедурного типа. Результат функции должен быть
строкового, вещественного, целого, символьного, булевского типа,
указателем или иметь перечислимый тип, определенный пользовате-
лем.