Описание процедур и функций

Синтаксис процедур

$ ProcedureDeclaration = ProcedureHeading ";" ProcedureBody

$ ProcedureHeading = SUB ident “(“ [FormalParameters] “)”

$ ProcedureBody = [ DeclarationSequence ] BEGIN StatementSequence

END SUB ident ";"

Синтаксис функций

$ FunctionDeclaration = FunctionHeading ";" FunctionBody

$ FunctionHeading = FUNCTION ident “(“ [FormalParameters] “)” “:”qualident

$ FunctionBody = [ DeclarationSequence ] BEGIN StatementSequence

END FUNCTION ident ";"

 

$ DeclarationSequence = Declaration { Declaration }

$ Declaration = ( { ConstantDeclaration } | { VariableDeclaration } | { ProcedureDeclaration } | { FunctionDeclaration } )

Описание

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

Функции служат, прежде всего, для определения алгоритма вычисления некоторого значения. В этом отношении функции подобны выражениям, которые также вычисляют значение. В соответствии с этим вызов функции является одним из допустимых операндов выражения, обозначая в нем то значение, которое вычисляет ("возвращает") функция.

Описание процедуры/функции (далее подпрограммы) состоит из заголовка и тела. Заголовок подпрограммы описывает её имя и формальные параметры. Для функций заголовок также содержит и тип возвращаемого значения. Тело подпрограммы содержит локальные описания и операторы.

Функция обязательно должна возвращать какое либо значение. Для этого необходимо использовать оператор RETURN с параметром-результатом данной функции. В теле процедуры оператор RETURN может быть использован без параметров для выхода из неё.

Все константы, переменные, процедуры и функции, описанные в теле подпрограммы, являются локальными для неё.

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

Использование идентификатора подпрограммы внутри тела приведет к рекурсивному вызову подпрограммы.

Предварительное описание процедур/функций отсутствует. Любая процедура/функция может быть вызвана, если ее описание находится в текущем блоке, или в одном из объемлющих.

Пример

Создание и использование процедуры:

Sub Main;

//Объявление процедуры SimpleSub c тремя формальными параметрами

Sub SimpleSub(a, b: Integer; var c: Integer);

Begin //Начало текста процедуры SimpleSub

c := a + b;

End Sub SimpleSub; //Конец текста процедуры SimpleSub

Var

a: Integer; // Объявление переменных для модуля Main

Begin

SimpleSub(1, 3, a); //Вызов процедуры SubSample

End Sub Main;

Создание и использование функции:

Function Func1(a, b: Integer): Double;

Var //Объявление переменных для функции Func1

c: Double;

Begin //Начало текста функции Func1

c := (a + b) / 2;

Return c; // Результат, возвращаемый функцией Func1

End Function Func1; //Конец функции Func1

Var //Объявление переменных для модуля FunctionSample

c: Double;

Begin //Начало текста программы

c := Func1(4, 5); //Использования функции Func1

End Sub Main;

См. также:

Формальные параметры | Описания и синтаксические правила