Навигация
Оглавление
Процедурные типы данных
Наряду с уже известными типами данных в языке Delphi введен так называемый процедурный тип, с помощью которого обычные процедуры и функции можно интерпретировать как некоторую разновидность переменных. Определение процедурного типа состоит из зарезервированного слова procedure или function, за которым следует полное описание параметров. Для функции дополнительно указывается тип результата. Символические имена параметров никакой роли не играют, поскольку нигде не используются.

type
TProc = procedure (X, Y: Integer);
TFunc = function (X, Y: Integer): Boolean;

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

var
P: TProc;
F: TFunc;

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

program Console;

{$APPTYPE CONSOLE}

uses
SysUtils;

function Power(X, Y: Double): Double;
begin
Result := Exp(Y * Ln(X));
end;

type
TFunc = function (X, Y: Double): Double;

var
F: TFunc;

begin
F := Power; // В переменную F заносится адрес функции Power
Writeln('2 power 4 = ', F(2, 4)); // Вызов Power посредством F
Writeln('Press Enter to exit...');
Readln;
end.

Обращение к процедурной переменной следует выполнять только после установки ее значения. Чтобы установка значения была корректной, процедура либо функция справа от знака присваивания не должна быть встроенной подпрограммой модуля System.

 

Сайт создан в системе uCoz