Spec-Zone.ru › Ada 2012
Справочник по Ada 2012

6.3 Тела подпрограмм

Тело_подпрограммы определяет выполнение подпрограммы.

Синтаксис

Тело_подпрограммы ::=
[Указатель_переопределения]
Спецификация_подпрограммы
[Спецификация_аспекта] is
Декларативная_часть
begin
Обрабатываемая_последовательность_операторов
end [Определяющий_указатель];
Если Определяющий_указатель появляется в конце Тела_подпрограммы, он должен повторять Определяющий_указатель из Спецификации_подпрограммы.

Правила допустимости

В отличие от других тел, Тело_подпрограммы не обязательно должно быть завершением предыдущей декларации, в этом случае тело объявляет подпрограмму. Если тело является завершением, оно должно быть завершением Декларации_подпрограммы или Декларации_подпрограммы_с_параметрами. Профиль Тела_подпрограммы, который завершает декларацию, должен полностью соответствовать профилю декларации.

Статическая семантика

Тело подпрограммы рассматривается как объявление. Оно может либо завершить предыдущее объявление, либо само быть начальным объявлением подпрограммы.

Динамическая семантика

Выполнение тела негенерической подпрограммы не имеет иного эффекта, кроме как установить, что подпрограмму можно вызывать без сбоя проверки обработки.
Выполнение Тела_подпрограммы вызывается вызовом подпрограммы. Для этого выполнения Делкларативная_часть обрабатывается, а затем выполняется Обрабатываемая_последовательность_операторов.

Примеры

Пример тела процедуры:
procedure Push(E : in Element_Type; S : in out Stack) is
begin
if S.Index = S.Size then
raise Stack_Overflow;
else
S.Index := S.Index + 1;
S.Space(S.Index) := E;
end if;
end Push;
Пример тела функции:
function Dot_Product(Left, Right : Vector) return Real is
Sum : Real := 0.0;
begin
Check(Left'First = Right'First and Left'Last = Right'Last);
for J in Left'Range loop
Sum := Sum + Left(J)*Right(J);
end loop;
return Sum;
end Dot_Product;


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API