Программирование на языке Delphi/§8
Базовый уровень статей | |
Процедуры и функции предстовляют собой относительно самостоятельные фрагменты программы - подпрограммы, оформленные особенным образом и имеющие название. Различие между функцией и процедурой заключается в том, что результататом работы функции является некоторое значение.
Заголовк процедуры:
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;