* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Процедурные типы
15 апреля 2009

В языке Delphi процедуры и функции рассматриваются не только как части програм-
мы, которые можно выполнять с помощью вызовов, а трактуются гораздо шире: здесь до-
пускается интерпретация процедур и функций как объектов, которые можно присваивать
переменным и передавать в качестве параметров. Такие действия можно выполнять
с помощью процедурных типов. В описании процедурного типа задаются парамет-
ры, а для функции еще и возвращаемое значение.
По существу синтаксис записи процедурного типа в точности совпадает с записью
заголовка процедуры или функции, только опускается идентификатор после ключе-
вого слова procedure или function. Приведем несколько примеров объявлений
процедурного типа.
type
Proc = procedure;
SwapProc = procedure(var X, У: Integer);
StrProc = procedure(S: String);
MathFunc = function(X: Real): Real;
DeviceFunc = function(var F: Text): Integer;
MaxFunc = function(A, B: Real; F: MathFunc): Real;
Имена параметров в описании процедурного типа играют чисто декоративную
роль — на смысл описания они не влияют.
Язык Delphi не позволяет описывать функции, которые возвращают значения про-
цедурного типа. Результат функции должен быть указателем строкового, веществен-
ного, целого, символьного, булевого типа или иметь перечислимый тип, определен-
ный пользователем.
Рассмотрим небольшой пример. Объявляем следующую функцию.
function Calc(X,Y: Integer): Integer;
Затем объявляем переменную F.
var
F: function(X,Y: Integer): Integer;
И присваиваем ей ссылку на функцию.
F := Calc;
С этой переменной можно поступать точно так же, как и с остальными переменны-
ми, ее можно применять и для вызова функций. Вот как это происходит в программе.
function Calc(х,у:Integer): Integer;
begin
Result := X + Y;
end;
type
F = function (X,Y:Integer): Integer;
var
Pfunc: F;
begin
Pfunc := Calc;
Writeln(Pfunc(2,3));
Readln;
end.
Сначала описана функция Calc, в которой выполняется сложение двух чисел, за-
тем объявлен процедурный тип F и создана процедурная переменная pfunc, которой
в дальнейшем присваивается ссылка на функцию Calc. Вывод на экран в выражении
writeln(pfunc(2, 3)) ,- производится с помощью процедурной переменной pfunc.
На экране появится цифра 5.
Наверно, некоторые задумаются, зачем так усложнять программу, ведь можно не-
посредственно сделать вывод самой функции, не делая дополнительные преобразова-
ния. Все дело в том, что различных функций может быть сколь угодно много, и тогда
для вывода каждой функции придется отдельно вызывать функцию write с соответ-
ствующими параметрами. Но присваивание функций процедурной переменной по-
зволяет использовать только одну форму вывода Writeln (pfunc (X, Y));, что делает
программу более понятной, позволяет сократить ее и исключить возможные ошибки.
Использование процедурных переменных позволяет во многих случаях улучшить
наглядность программы и, соответственно, сделать ее более надежной.

Теги: borland delphi vista, borland delphi, SendTo, Windows Borland Delphi

Статьи по теме:

Компонент TQuickRep
Сабклассинг окон с помощью Windows API
Ключевые слова языка Delphi
Соглашения об именах
Свойство RecordNumber
CheckDbfFieldDefs
Свойство Brush
Свойство DataSet
Свойство HeaderBand
Компонент TButton
Компонент TQRSubDetail
Свойство AutoSize
Свойство Color
Получение почтового ящика
Структура системы электронного документооборота
| Borland Delphi | vitek |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30


     



Данный сайт или домен продается

© 2009 Seoliga.ru | Borland Delphi | Процедурные типы. Регион сайта: Москва и Санкт-Петербург