$ 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;
См. также: