ГОСТ Р И С 0 10303-11 — 2009
Правила и ограничения:
a) Оператор RETURN должен быть определен в толе функции для каждой из возможных ветвей вы
числительного процесса, активизируемого при обращении кданной функции.
b
)Для каждого оператора RETURN, присутствующего вфункции, должно быть задано выражение, по
которому вычисляется значение, возвращаемое в точку вызова.
c) Выражения, заданные для операторов RETURN, должны соответствовать объявленному типудан
ных возвращаемого функцией значения.
d) Функции не должны иметь побочных эффектов. Поскольку формальные параметры функции не
должны определяться ключевым словом VAR. изменения этих параметров внутри функции не показывают ся
в точке вызова функции.
П р и м е ч а н и е — Локальным переменным, объявленным объектными типами данных, могут быть
назначены экземпляры формальных параметров. Изменение этих локальных переменных будет влиять на фор
мальный параметр, поскольку назначение осуществляется по ссылке. В соответствии с приведенным выше пра
вилом. изменения формальных параметров не показываются в точке вызова функции, поэтому особое внимание
необходимо обратить на попытку возврата этих локальных переменных.
e)Функции могут модифицировать локальные переменные или параметры, объявленные во внешней
области видимости, то есть если данная функция объявлена в заголовке (элемент algorithm_head в опре
делении синтаксиса)оператора FUNCTION. PROCEDURE или RULE.
9.5.2 Процедура
Процедура является алгоритмом, который получает параметры в точке вызова и обрабатывает их
некоторым образом для получения желаемого конечного состояния. Изменения параметров внутри проце
дуры показываются вточке вызова только в том случае, если формальному параметру предшествует клю
чевое слово VAR.
Синтаксис:
271 procedure_decl = procedure_headalgorithm_head{stmt} END_PROCEDURE
272 procedure head = PROCEDURE procedurejd (’(’ [ VAR ] formal_parameter
{’;’ [ VAR) formal_parameter} ’
.
218formal_parameter = parameterJd {’,* parameterjd}
parameter,.type.
266 parameter_type = generalized_types | namedjypes [ simpleJypes.
173algorithm head = {declaration} [ constant_decl] [ local_decl].
199 declaration = entity_decl | function_decl | procedure_decl |
subtype_constraint_decl |type_decl.
Правило: процедуры могут модифицироватьлокальные переменные или параметры, объявленные во
внешней области видимости, то есть если данная функция объявлена взаголовке (элемент algorithm_head в
определении синтаксиса) оператора FUNCTION. PROCEDURE или RULE.
9.5.3 Параметры
Функция или процедура может иметь формальные параметры. Каждый формальный параметр уста
навливает имя и тип параметра. Имя является идентификатором, которыйдолжен быть уникальным вобла
сти видимости функции или процедуры. Формальный параметр процедуры может, кроме того, быть объяв
лен с ключевым словом VAR (изменяемый), которое означает, что если данный параметр изменяется внут
ри процедуры, то данное изменение должно быть передано в точку вызова процедуры. Параметры, не
объявленные как VAR, также могут изменяться, но такое изменение не будет видимым после возврата
управления вызвавшей структуре.
Синтаксис:
218 formal_parameter = parameterjd {V param eterjd}parameter_type.
266 parameter_type = generalized_types | namedjypes |simpleJypes.
Пример — Следующие объявления показывают, как могут быть объявлены формальные пара
метры.
FUNCTIONdist(p1,p2 : point) : REAL;
PROCEDURE midpt(p1.p2 : point; VAR result : point);
Обобщенные типы данных (AGGREGATE, общий агрегированный тип данных. GENERIC и
GENERIC_ENTITY) (см. 8.5) используются для того, чтобы обеспечить обобщение типов данных, ислользу-
48