Процедуры и функции
о процедурах и функциях
🕛 25.03.2008, 12:30
Сегодня мы поговорим о процедурах и функциях. Всё это очень не сложно, просто многие не до конца понимают разницу между процедурами и функциями, и из-за этого появляются ошибки, которые не так просто заметить, как исправить. Чтобы не совершать таких ошибок давай попробуем расставить все точки над Ё. Ну начнём с некоего определения. Процедуры и функции представляют собой относительно самостоятельный участок программы, оформленный определённым образом и наделённый именем. По этому имени и происходит вызов процедуры или функции. Вот пример простой процедуры:procedure Sample1(index:integer);
var
i:integer;
begin
i:=index/2;
end;
Процедура имеет имя Sample1. После имени, в скобках, объявляются переменные, для передачи значения в процедуру. В разделе Var, где объявляются переменные, объявлена локальная переменная i типа integer (целое число). Это локальная пременная, поэтому её можно использовать только в теле процедуры. После выхода из процедуры пременная уничтожается. В блоке Begin...end; происходят действия над перемеными, объектами и др. т.е образуются действия процедуры. В данном случае, я присваиваю переменнорй i переменную index делённую на 2. Для вызова этой процедуры достаточно только набрать её имя, а значит Sample1. Если процедура относится к каому-то объекту, например к форме, то в объявлении нужно написать имя объекта, а после точки имя самой процедуры. Например так, процедура относится к объекту Form1:
procedure Form1.Sample2;
begin
Sample1(20);//вызываем ранее созданную процедуру
end;
Здесь вызывается процедура Sample1, которую я написал ранее. Имена всех процедур должны начинаться с латинских букв, но могут заканчиваться цифрами. Нельзя пользоватсья русскими буквами и начинать имена процедур с цифр. Если процедура не относится к объекту, то её надо описать перед использованием, например такой код приведёт к ошибке:
procedure Form1.Sample2;
begin
Sample1(20);
end;
procedure Sample1(index:integer);
var
i:integer;
begin
i:=index/2;
end;
Это не верно, потому что процедура Sample1 сначала используется, и только потом описывается. Компилятор это не поймёт и пошлёт тебя куда подальше, например в память по адрессу 00F91203 :) А вот так всё будет в норме:
procedure Sample1(index:integer);
var
i:integer;
begin
i:=index/2;
end;
procedure Form1.Sample2;
begin
Sample1(20);
end;
Ну а если процедура относится к объекту, то проблем нету, потому что объект имеет область описания и эта область доступна компилятору:
type
TForm1 = class(TForm)
procedure Sample1;
procedure Sample3;
end;
Теперь поговорим про функции : это те же процедуры, только они возвращают какое-то значение, то есть сами имеют какой-то тип. Т.е. они могут использоваться в программе на ряду с выражениями и пременными:
function SampleFunc:integer;
var
i:integer;
begin
i:=40;
result:=i;
end;
procedure Form2.Sample4;
var
y:integer;
begin
y:=SampleFunc;
end;
В этом примере функция SapleFunc имеет тип integer. Для возврата значения нужно его присвоить к переменной Result. В процедуре Sample4 происходит присваивание пременной y функции. После выполнения процедуры пременная y ,будет содержать в себе 40. Всё просто! Все остальные правила объявления функций такие же, как и у процедур. Ну вот вроде и всё! До скорых, я надеюсь, встречь, о достопочтимый читатель!!!