Читайте также: |
|
Глава 6
Процедуры и функции
Часто, работая над программой, программист замечает, что некоторая последовательность инструкций встречается в разных частях программы несколько раз. Например, в листинге 6.1 приведена программа пересчета веса из фунтов в килограммы. Обратите внимание, что инструкции, обеспечивающие ввод исходных данных из полей редактирования, расчет и вывод результата (в листинге они выделены фоном), есть как в процедуре обработки события на кнопке Вычислить, так и в процедуре обработки события OnKeyPress В поле Editl.
Листинг 6.1. Пересчет веса из фунтов в килограммы
unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
Type
TForm1 = class(TForm)
Label1: TLabel; // пояснительный текст
Edit1: TEdit; // поле ввода веса в фунтах
Button1: TButton; // кнопка Вычислить
Label2: TLabel; // поле вывода результата
procedure ButtonlClick(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private { Private declarations }
public { Public declarations }
end;
Var
Form1: TForm1;
Implementation
{$R *.dfm}
// щелчок на кнопке Вычислить
procedure TForm1.Button1Click(Sender: TObject);
Var
f: real; // вес в фунтах
kg: real; // вес в килограммах
Begin
f:= StrToFloat(Edit1.Text);
kg:= f* 0.4059;
Label2.Caption:= Edit1.Text + ' ф. — это ' +
FloatToStrF(kg, ffGeneral, 4, 2} + 'кг.';
end;
// нажатие клавиши в поле ввода исходных данных
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
f: real; // вес в фунтах
kg: real; // вес в килограммах
Begin
if Key = Char(VK_RETURN) then
Begin
f: = StrToFloat(Edit1.Text);
kg:= f * 0.4059;
Label2.Caption:= Edit1.Text + ' ф. - это ' +
FloatToStrF(kg, ffGeneral, 4, 2) + 'кг.';
end;
end;
End.
Можно избежать дублирования кода в программе. Для этого надо оформить инструкции, которые встречаются в программе несколько раз, как подпрограмму, и заменить инструкции, оформленные в виде подпрограммы, инструкцией вызова подпрограммы.
В листинге 6.2 приведена программа пересчета веса из фунтов в килограммы, в которой ввод исходных данных, вычисления и вывод результата объединены в подпрограмму, реализованную как функция.
Листинг 6.2. Пересчет веса из фунтов в килограммы (использование процедуры)
unit Onit1;
Interface
Uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
Type
TForm1= class(TForm)
Label1: TLabel; // пояснительный текст
Edit1: TEdit; // поле ввода веса в фунтах
Button1: TButton; // кнопка Вычислить
Label2: TLabel; // поле вывода результата
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private { Private declarations }
public { Public declarations }
end;
Var
Form1: TForm1;
implementation
{$R *.dfm}
// процедура программиста
procedure FuntToKg;
var
f: real; // вес в фунтах
kg: real; // вес в килограммах
Begin
f:= StrToFloat(Form1.Edit1.Text);
kg:= f * 0.4059;
Form1.Label2.Caption:= Form1.Edit1.Text + ' ф. — это ' +
FloatToStrF(kg, ffGeneral, 4, 2) + 'кг.';
end;
// щелчок на кнопке Вычислить
procedure TForml.ButtonlClick(Sender: TObject);
Begin
FuntToKg; // вызов процедуры FuntToKg
end;
// нажатие клавиши в поле ввода исходных данных
procedure TForm1.Edit1KeyPress(Sender: TObject;
var Key: Char);
Begin
if Key = Char(VK_RETURN)
then FuntToKg; // вызов процедуры FuntToKg
end;
End.
Преимущества использования подпрограмм очевидны. Во-первых, в программе нет дублирования кода, что сокращает трудоемкость создания программы, делает более удобным процесс отладки и внесения изменений. Представьте, что нужно изменить пояснительный текст, выводимый программой пересчета веса из фунтов в килограммы. В программе, не использующей подпрограмму, нужно просмотреть весь текст и сделать необходимые изменения. Если программа использует подпрограмму, то изменения надо внести только в текст подпрограммы. Во-вторых, значительно повышается надежность программы. Следует обратить внимание, что подпрограммы используют не только тогда, когда нужно избежать дублирования кода. Удобно большую задачу разделить на несколько подзадач и оформить каждую задачу как подпрограмму. В этом случае значительно улучшается "читаемость" программы и, как следствие, существенно облегчается процесс отладки.
Подпрограмма — это небольшая программа, которая решает часть общей задачи. В языке Delphi есть два вида подпрограмм — процедура и функция.
У каждой подпрограммы есть имя, которое используется в программе для вызова подпрограммы (процедуры).
Отличие функции от процедуры состоит в том, что с именем функции связано значение, поэтому функцию можно использовать в качестве операнда выражения, например, инструкции присваивания.
Как правило, подпрограмма имеет параметры. Различают формальные и фактические параметры.
Параметры, которые указываются в объявлении функции, называются формальными. Параметры, которые указываются в инструкции вызова процедуры, называются фактическими.
Параметры используются:
В общем случае в качестве фактического параметра процедуры можно использовать выражение, тип которого должен совпадать с типом соответствующего формального параметра.
Дата добавления: 2015-02-16; просмотров: 82 | Поможем написать вашу работу | Нарушение авторских прав |