Переменной процедурного типа можно присвоить процедурное значение. Процедурные значения могут быть следующими:
В контексте процедурных значений описание процедуры или функции можно рассматривать как специальный вид описаний констант, когда значением константы является процедура или функция. Рассмотрим, например, следующее описание:
var P: SwapProc;
F: MathFunc;
procedure Swap(var A, B: Integer); far;
var
Temp: Integer;
beginTemp := A;
A := B;
B := Temp;
end;
function Tan(Angle: Real); far;
beginTan := Sin(Angle) / Cos(Angle);
end;
Переменным P и F можно присвоить значения следующим образом:
P := Swap;
F := Tan;
а вызовы с помощью P и F можно выполнить так:
P(I, J);
X := F(X);{ эквивалентно Swap(I, J) }
{ эквивалентно X := Tan(X) }
Использование процедурных переменных, которым в операторе вызова процедуры или функции присваивается значение nil, приводит к ошибке. Значение nil предназначено для указания того, что процедурная переменная не присвоена, и, так где процедурная переменная может получить значение nil, участвующие в этой процедурной переменной вызовы процедур и функций следует подвергать проверке:
if @P <> nil then P(I, J);
Обратите внимание на использование операции @ для указания того, что P проверяется, а не вызывается.