Процедуры и функции

Часто, работая
над программой, программист замечает, что некоторая последовательность
инструкций встречается в разных частях программы несколько раз. Например, в
листинге 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 EditlKeyPress(Sender: TObject;


var Key: Char); private


{ Private declarations } public


{ Public declarations }


end;


var


Form1: TForm1 ;


implementation


{$R *.dfm}


// щелчок на кнопке Вычислить


procedure TForml.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 TForml.Edit1KeyPress(Sender: TObject; var Key:
Char);


var


f : real; // вес в фунтах kg : real; // вес в килограммах


begin


if Key = Char(VK_RETURN) then


begin


f: = . StrToFloat(Editl.Text) ;


kg := f * 0.4059;


Label2.Caption := Editl.Text + ' ф. - это ' +


FloatToStrF(kg, ffGeneral, 4, 2) + 'кг.'1.;


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 EditlKeyPress(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;


Forml.Label2.Caption := Forml.Edit1.Text + ' ф. — это ' +


FloatToStrF(kg, ffGeneral, 4, 2) + 'кг.';


end;


// щелчок на кнопке Вычислить


procedure TForml.ButtonlClick(Sender: TObject);


begin


FuntToKg; // вызов процедуры FuntToKg end;


// нажатие клавиши в поле ввода исходных данных


procedure TForm1.EditlKeyPress(Sender: TObject;


var Key: Char);


begin


if Key = Char(VK_RETURN)


then FuntToKg; // вызов процедуры FuntToKg end;


end.



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


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


У каждой
подпрограммы есть имя, которое используется в программе для вызова подпрограммы
(процедуры).


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


Как правило,
подпрограмма имеет параметры. Различают формальные и фактические
параметры.


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


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



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

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

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: