Процедуры и функции предстовляют собой относительно самостоятельные фрагменты программы - подпрограммы, оформленные особенным образом и имеющие название. Различие между функцией и процедурой заключается в том, что результататом работы функции является некоторое значение.
Заголовк процедуры:

Базовый уровень статей

Выделить только проверенную информацию

Создать черновик

procedure <название>(Список параметров);
begin
...
end;

Заголовок функции:

function <название>(Список параметров):<тип>;
begin
...
end;

Список параметров может быть пустым. Если он не пустой, то в нем должны быть перечислены названия параметров с указанием их типа:

function abc(a:integer;b:string):integer;
procedure ddd; //Если нет параметров, то скобки можно не указывать

Локализация имен

править

В любой подпрограмме можно описывать переменные и подпрограммы- такие подпрограммы называют подпрограммами низшего уровня. Все имена, написанные в подпрограмме, локализуются в ней,то есть они невидимы снаружи подпрограммы.

...
procedure A;

var va:byte;  //Переменная va доступна в процедуре А и В

  procedure B;  //Переменная vb доступна объявлена в процедуре В, и поэтому к ней нельзя обратиться из процедуры А
  var vb:byte; 
  begin
  ...
  end;

vc:byte; //Переменная vc объявлена после процедуры В, поэтому в процедуре В к ней нет доступа.
begin
...
end;
...

Передача функциям/процедурам переменных параметров

править

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

...
procedure Inc(var incr:integer; size:integer);
//Процедура увеличивает значение incr на size
begin
incr:=incr+size;
end;

var a:integer;
begin
a:=10;
inc(a,20); //Мы передаем процедуре адрес переменной а
end.

В качестве параметра incr мы указываем переменную а. Но переде параметром стоит зарезервированное слово var. Поэтому любое изменение параметра incr приведет к изменению переменной a.

Умалчиваемые параметры

править

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

...
procedure Proc(a:integer=0); //Значение параметра а по умолчанию = 0
begin
...
end;

begin
Proc;  //Значение параметра а=0
Proc(10); // Значение параметра а=10
end.

Перегрузка функций и процедур

править

В языке Delphi можно использовать функции и процедуры с одинаковыми названиями, но разными параметрами. Такие функции/процедуры являются перегруженными. Для перегрузки функций/процедур в заголовке необходимо указать зарезервированное слово overload.

function abs(i:integer):integer; overload;
begin
if i<0 then result:=-i
  else result:=i;
end;

function abs(i:real):real; overload;
begin
if i<0 then result:=-i
  else result:=i;
end;

Процедурный тип

править