Справочник по Ada 95
6.5 Операторы return
Оператор return_statement используется для завершения выполнения внутреннего содержащего subprogram_body, entry_body или accept_statement.
Синтаксис
return_statement ::= return [expression];
Правила разрешения имён
Выражение expression, если оно присутствует в операторе return_statement, называется возвращаемым выражением. Тип результата функции — это тип, обозначенный subtype_mark после ключевого слова return в профиле функции. Ожидаемый тип для возвращаемого выражения — это тип результата соответствующей функции.
Правила легитимности
Оператор return_statement должен находиться внутри вызываемого конструкта, и он относится к самому внутреннему. Оператор return_statement не должен находиться внутри тела, которое находится внутри конструкта, к которому относится оператор return_statement.
Тело функции должно содержать по крайней мере один оператор return_statement, относящийся к телу функции, если функция не содержит операторов code_statement. Оператор return_statement должен содержать возвращаемое выражение тогда и только тогда, когда он относится к телу функции.
Динамическая семантика
При выполнении оператора return_statement, выражение (если оно есть) сначала вычисляется и преобразуется к типу результата.
Если тип результата является универсальным типом, то метка результата — это метка значения выражения expression.
Если тип результата — конкретный помеченный тип:
- Если он ограниченный, то выполняется проверка, соответствует ли метка значения возвращаемого выражения типу результата. Если проверка не пройдена, генерируется исключение Constraint_Error.
- Если он неограниченный, то метка результата — это метка типа результата.
Тип является типом возвращаемым по ссылке, если он является потомком одного из следующих:
- ограниченного помеченного типа;
- задачи или защищённого типа;
- неприватного типа с ключевым словом limited в его объявлении;
- составного типа с подкомпонентом типа, возвращаемого по ссылке;
- приватного типа, полным типом которого является тип, возвращаемый по ссылке.
Если тип результата — тип, возвращаемый по ссылке, то проверяется, является ли возвращаемое выражение одним из следующих:
- имя, обозначающее представление объекта, уровень доступности которого не глубже, чем у главного объекта, который подготовил тело функции; или
- выражение в скобках или qualified_expression, операнд которого является одним из этих видов выражений.
Если проверка не пройдена, генерируется исключение Program_Error.
Для функции с типом результата, возвращаемым по ссылке, результат возвращается по ссылке; то есть вызов функции обозначает постоянное представление объекта, связанного со значением возвращаемого выражения. Для любой другой функции результат возвращается по значению; то есть преобразованное значение присваивается анонимной константе, созданной в момент оператора return_statement, и вызов функции обозначает этот объект.
Наконец, выполняется передача управления, которая завершает выполнение вызываемого конструкта, к которому относится оператор return_statement, и возвращается к вызывающей стороне.
Примеры
Примеры операторов return:
return; -- в теле процедуры, entry_body или accept_statement
return Key_Value(Last_Index); -- в теле функции
return Key_Value(Last_Index); -- в теле функции