Язык программирования Delphi (Теория). Процедуры и функции:
Сегодня нам предстоит поговорить о процедурах и функциях. Ко мне иногда приходят письма, в которых просят исправить ошибку в их коде. Иногда бывает, что ошибки нет, просто некоторые не до конца понимают разницу между процедурами и функциями. Вот я и решил рассказать тебе эту разницу.
Процедуры и функции - это некий участок кода, который выделен в отдельный блок. Простая процедура выглядит так:
procedure Exampl;
var
i:Integer;//Объявление локальной переменной
begin
i:=10;//Присваиваю переменной значение
end;
Процедура называется Exampl. После слова vаr идёт объявление локальных переменных. Я объявляю одну переменную i типа integer (целое число). Это локальная переменная и её можно использовать только внутри этой процедуры. После выхода из неё, переменная уничтожается. Внутри блока begin ... end я присваиваю переменной значение 10. В принципе, ничего не происходит, потому что после присваивания числа процедура заканчивается и переменная i уничтожается. Для вызова процедуры нужно написать тольк Exampl
Если процедура относится к объекту, то нужно написать в объявлении имя объекта, а после точки имя процедуры. Вот пример процедуры относящейся к объекту формы Form1:
procedure Form1.Examp2;
begin
Exampl; //Вызываем процедуру Exampl написанную ранее.
end;
В этой процедуре Examp2 я вызываю написанную ранее Exampl. Все имена процедуры должны начинатся с латинских букв и могут заканчиватся цифрами. Нельзя использовать руские буквы и имена процедур не могут начинатся с цифр.
Если процедура не относится к объекту, то есть ещё одно правило: она должна быть описана до использования. Например:
procedure Examp2;
begin
Exampl; //Произойдёт ошибка, потому что сама процедура Exampl; описана ниже
end;
procedure Exampl;
var
i:Integer;
begin
i:=10;
end;
procedure Examp4;
begin
Exampl; //Здесь ошибки не будет, потому что Exampl; описан выше.
end;
Если процедура относится к объекту, то не имеет значения, где она написана и где её вызываете. Потому что объекты имеют область описания и она доступна компилятору:
По этому описанию компилятор узнаёт о существовании процедур, поэтому ты можешь их реализовывать в любом порядке, ошибок не будет. Мы уже знакомы с такими описаниями на практике, оно находится в начале любого модуля.
Теперь разберёмся с функциями. Это те же процедуры, только умеют возвращать значения. Простейшая функция выглядит так:
function Exampl:Integer;
var
i:Integer;//Объявление локальной переменной
begin
i:=10;//Присваиваю переменной значение
Result:=i; // Возвращяю значение i
end;
Я объявил функцию, которая будет возвращать значение типа integer (целое число) function Exampl: Integer . Для возврата значения, нужно присвоить его к переменной Result.
Для вызова функции нужно:
procedure Form1.Examp2;
var
x:Integer;
begin
x:=Exampl; //Вызываем процедуру Exampl написанную ранее.
end;
В этом примере я присваиваю переменной x значение возвращаемое функцией Exampl.
Всё остальные правила объявления функций такие же, как и у процедур.
Теперь посмотрим, как можно передавать значения внутрь процедур:
function Exampl(index:Integer):Integer;
begin
Result:=index/2; // Возвращяю переданное значение index
// делённое на 2
end;
После имени функции, в скобках указывается тип переменной, который можно передать внутрь функции или процедуры. В моём случае это переменная index типа Integer. Вызов моей функции будет такой:
procedure Form1.Examp2;
var
x:Integer;
begin
x:=Exampl(20); //Вызываем процедуру Exampl написанную ранее.
end;
Я предаю в функцию Exampl значение 20, а она мне вернёт 20 делённое на 2, то есть 10.
Вот кажется и всё, что касается процедур и функций.