* При перепечатке материалов ссылка на 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

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

Основы CLS
Плавающая запятая в BASM
Свойство Options
Новая сетевая технология АТМ
Свойство FooterBand
Свойство Alignment
Свойство Shape
Использование выражений
Свойство PaperSizeSupported
Стек TCP/IP
MMX и SSE2
Основные принципы создания пользовательского интерфейса
GetFieldData
Использование выражений
Свойство DataSet для TQRDBText
| 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 31


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

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