Глава 6. ПОДПРОГРАММЫ

Содержание

6.1. ОПИСАНИЕ ПОДПРОГРАММЫ
6.2. ВИДЫ ФОРМАЛЬНЫХ ПАРАМЕТРОВ
6.3. ТЕЛА ПОДПРОГРАММ
6.4. ВЫЗОВЫ ПОДПРОГРАММ
6.5. ФУНКЦИИ
6.6. ПРОФИЛЬ ТИПА ПАРАМЕТРОВ ИРЕЗУЛЬТАТА. СОВМЕЩЕНИЕ ПОДПРОГРАММ
6.7. СОВМЕЩЕНИЕ ОПЕРАЦИЙ

Подпрограммы являются одной из четырех форм программных модулей, из которых могут быть составлены программы. Другие формы — это пакеты, задачные модули и настраиваемые модули.

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

Ссылки: вызов подпрограммы 6.4, вызов процедуры 6.4, вызов функции 6.4, задачный модуль 9, настраиваемый модуль 12, описание подпрограммы 6.1, пакет 7, процедура 6.1, тело подпрограммы 6.3, функция 6.5.

6.1. ОПИСАНИЕ ПОДПРОГРАММЫ

Описание подпрограммы объявляет процедуру или функцию в зависимости от указанного начального зарезервированного слова.

описание-подпрограммы ::= спецификация-подпрограммы;спецификация - подпрограммы ::=   procedure идентификатор [раздел-формальных-параметров]   | function обозначение [раздел-формальных-параметров]        return обозначение-типаобозначение ::= идентификатор | знак-операции знак-операции ::= строковый-литералраздел-формальных-параметров ::=   (спецификация-параметра {; спецификация-параметра})спецификация-параметра ::=   список-идентификаторов : вид обозначение-типа [:= выражение]вид ::= [in] | in out | out

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

Спецификация параметра с несколькими идентификаторами эквивалентна последовательности спецификаций с одним параметром, как поясняется в разд. 3.2. Каждая спецификация одного параметра описывает формальный параметр. Если вид явно не задан, то предполагается вид in. Если спецификация параметра оканчивается выражением, то оно является выражением по умолчанию формального параметра. Выражение по умолчанию допустимо только в спецификации параметра вида in (независимо от явного или неявного его указания). Тип выражения по умолчанию должен совпадать с типом соответствующего формального параметра.

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

Предвыполнение описания подпрограммы предвыполняет соответствующий раздел формальных параметров. Предвыполнение раздела формальных параметров не дает другого эффекта.

Примеры описания подпрограмм:

procedure TRAVERSE_TREE; procedure INCREMENT(X : in out INTEGER); procedure RIGHTINDENT(MARGIN : out LINESIZE); -- CM. 3.5.4 procedure SWITCH(FROM, TO : in out LINK); -- CM. 3.8.1function RANDOM return PROBABILITY; -- CM. 3.5.7function MINCELL(X : LINK) return CELL; -- CM. 3.8.1 function NEXTFRAME(K : POSITIVE) return FRAME; -- CM. 3.8 function DOTPRODUCT(LEFT,RIGHT: VECTOR) return REAL; -- CM. 3.6function"*"(LEFT,RIGHT : MATRIX) return MATRIX; -- CM. 3.6 

Примеры параметров с выражениями по умолчанию:

procedure PRINT_HEADER( PAGES : in NATURAL;   HEADER : in LINE := (1 .. LINE'LAST => ' '); -- CM. 3.6    CENTER : in BOOLEAN := TRUE);

Примечание. Вычисление выражений по умолчанию начинается при определенных вызовах подпрограмм, как пояснено в разд. 6.4.2 (выражения по умолчанию не вычисляются при предвыполнении описания подпрограммы).

Все подпрограммы могут быть вызваны рекурсивно и являются реентерабельными. Ссылки: вид 6.2, вызов подпрограммы 6.4, выражение 4.4, вычисление 4.5, идентификатор 2.3, имя 4.1, обозначение типа 3.3.2, операция 4.5, описание 3.1, Предвыполнение 3.9, пред-выполнение не имеет другого эффекта 3.9, процедура 6, совмещение 6.6, 8.7, список идентификаторов 3.2, строковый литерал 2.6, формальный параметр 6.2, функция 6.5.