Справочное руководство Ada 2012
6.8 Функции выражений
Определение expression_function_declaration предоставляет сокращенную запись для объявления функции, тело которой состоит из единственного оператора возврата.
Синтаксис
expression_function_declaration ::=
[overriding_indicator]
function_specification is
(expression)
[aspect_specification];
| [overriding_indicator]
function_specification is
aggregate
[aspect_specification];
[overriding_indicator]
function_specification is
(expression)
[aspect_specification];
| [overriding_indicator]
function_specification is
aggregate
[aspect_specification];
Правила разрешения имен
Ожидаемый тип для выражения или агрегата в expression_function_declaration соответствует типу результата (см. 6.5) функции.
Правила легальности
Если expression_function_declaration является завершением, оно должно быть завершением объявления subprogram_declaration или generic_subprogram_declaration. Профиль expression_function_declaration, завершающего объявление, должен полностью соответствовать этому объявлению.
Если подтип результата имеет один или несколько не ограниченных дискриминантов доступа, уровень доступности анонимного типа доступа каждого дискриминанта доступа, определяемый выражением или агрегатом expression_function_declaration, не должен быть статически глубже, чем у мастера, который обработал expression_function_declaration.
Статическая семантика
Определение expression_function_declaration объявляет функцию выражения. Возвращаемое выражение функции выражения — это выражение или агрегат expression_function_declaration. Завершение не разрешено для expression_function_declaration; однако expression_function_declaration может завершить предыдущее объявление.
Динамическая семантика
Вызов функции выражения осуществляется с помощью вызова подпрограммы. При выполнении вызова подпрограммы на функции выражения выполнение subprogram_body выполняет неявное тело функции, содержащее только simple_return_statement, выражение которого — возвращаемое выражение функции выражения.
Обработка expression_function_declaration не имеет других последствий, кроме как установления возможности вызова функции выражения без сбоя в Elaboration_Check.
Примеры
function Is_Origin (P : in Point) return Boolean is -- см. 3.9
(P.X = 0.0 and P.Y = 0.0);
(P.X = 0.0 and P.Y = 0.0);