Процедуры и Функции в Delphi. Назначение, примеры использования.

Часто, работая над программой, программист замечает, что некоторая последовательность инструкций встречается в разных частях программы несколько раз. Например, в листинге 6.1 приведена программа пересчета весаиз фунтов в килограммы. Обратите внимание, что инструкции, обеспечивающие ввод исходных данных из полей редактирования, расчет и вывод результата (в листинге они выделены фоном), есть как в процедуре обработки события на кнопке Вычислить, так и в процедуре обработки события onkeypress В поле Edit1.

 

Листинг: Пересчет веса из фунтов в килограммы.

01.unit Dnitl;
02.interface
03.uses
04.Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
05.Forms, Dialogs, StdCtrls;
06.type
07.TForml = class(TForm)
08.Labell: TLabel; // пояснительный текст
09.Editl: TEdit; // поле ввела веса в фунтах
10.Buttonl: TButton; // кнопка Вычислить
11.Label2: TLabel; // поле вывода результата
12.procedure ButtonlClick(Sender: TObject);
13.procedure EditlKeyPress(Sender: TObject; var Key: Char);
14.private
15.( Private declarations )
16.public
17.{ Public declarations }
18.end;
19.vac
20.Forml: TForml;
21.iinpl emen ta t i on
22.{SR *.dfm(
23.// щелчок на кнопке Вычислить
24.procedure TForml.ButtonlClickfSender: TObject);
25.vat
26.f : real// вес в фунтах
27.kg : real// вес в килограммах
28.begin
29.f := StrTqFloat(Editl.Text);
30.kg := f * 0.4059;
31.Label2.Caption := Editl.Text + ' ф. — это ' +FloatToStrF(kg, ffGeneral, 42) + 'KP';
32.end;
33.// нажатие клавиши в поле ввода исходных манных
34.procedure TForml.EditlKeyPress(Sender: TObject; таг Key: Char];
35.var
36.f ; real// вес в фунтах
37.kg : real,- // вес в килограммах
38.begin
39.if Key = Char(VK_RETU8H) then
40.begin
41.f := StrToFloat(Editl.Text);
42.kg := f * 0.4059;
43.Labe12.Caption := Editl.Text + ' ф. — это ' + FloatToStrFfkg, ffGeneral, 42) + 'кг.1;
44.end;
45.end;
46.end.
 

 

Можно избежать дублирования кода в программе. Для этого надо оформить инструкции, которые встречаются в программе несколько раз, как подпрограмму, и заменить инструкции, оформленные в виде подпрограммы, инструкцией вызова подпрограммы. В листинге 6.2 приведена программа пересчета веса из фунтов в килограммы, в которой ввод исходных данных, вычисления и вывод результата объединены в подпрограмму, реализованную как функция.

Листинг 6.2. Пересчет веса из фунтов в килограммы (использование процедуры)

01.unit Unitl;
02.interface
03.Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
04.Forms, Dialogs, StdCtrls;
05.type
06.TForml = class (TForm)
07.Labell: TLabel; // пояснительный текст
08.Editl: TEdit; // поле ввода веса в фунтах
09.Buttonl: TButton; // кнопка Вычислить
10.Label2: TLabel; // поле вывода результата
11.procedure ButtonlClick(Sender: TQbject) ;
12.procedure EditlKeyPress (Sender: TObject; var Key: Char);
13.private
14.{ Private declarations i
15.public
16.( Public declarations }
17.end;
18.var
19.Forml: TForml;
20.implementation
21.($R *.dfm}
22.// процедура
23.procedure FuntToKg;
24.var
25.f : real// вес в фунтах
26.kg : real// вес в килограммах
27.begin
28.f := StrToFloat(Forml.Editl.Text);
29.kg := f ' 0.4059;
30.Forml.Label2.Caption := Forml.Editl.Text + ' ф. - это ' +
31.FloatToStrFlkg, ffGeneral, 42) + 'кг.';
32.end;
33.// щелчок на кнопке Вычислить
34.procedure TForml,ButtonlClickfSender: TObject];
35.begin
36.FuntToKg; // вызов процедуры FuntToKg
37.end;
38.// нажатие клавиши в поле ввода исходных данных
39.procedure TForml.EditlKeyPress(Sender: TObject; var Key: Char);
40.begin
41.if Key = Char(VK_RETURN)
42.then FuntToKg; // вызов процедуры FuntToKg
43.end;
44.end.

 

Преимущества использования подпрограмм очевидны. Во-первых, в программе нет дублирования кода, что сокращает трудоемкость создания программы, делает более удобным процесс отладки и внесения изменений.

Представьте, что нужно изменить пояснительный текст, выводимый программой пересчета веса из фунтов в килограммы. В программе, не использующей подпрограмму, нужно просмотреть весь текст и сделать необходимые изменения. Если программа использует подпрограмму, то изменения надо внести только в текст подпрограммы. Во-вторых, значительно повышается надежность программы. Следует обратить внимание, что подпрограммы используют не только тогда, когда нужно избежать дублирования кода. Удобно большую задачу разделить на несколько подзадач и оформить каждую задачу как подпрограмму. В этом случае значительно улучшается "читаемость" программы и, как следствие, существенно облегчается процесс отладки.

Подпрограмма — это небольшая программа, которая решает часть общей задачи. В языке Delphi есть два вида подпрограмм — процедура и функция.

У каждой подпрограммы есть имя, которое используется в программе для вызова подпрограммы (процедуры). Отличие функции от процедуры состоит в том, что с именем функции связано значение, поэтому функцию можно использовать в качестве операнда выражения, например, инструкции присваивания. Как правило, подпрограмма имеет параметры. Различают формальные и фактические параметры.

Параметры, которые указываются в объявлении функции, называются формальными.

Параметры, которые указываются в инструкции вызова процедуры, называются фактическими.

Параметры используются:

  • для передачи данных в подпрограмму;
  • для получения из результата подпрограммы.

В общем случае в качестве фактического параметра процедуры можно использовать выражение, тип которого должен совпадать с типом соответствующего формального параметра.

dle

Помоги проекту! Расскажи друзьям об этом сайте: