Раздел 4.3 - Тело подпрограммы и локальные переменные

Тело подпрограммы определяет используемый алгоритм. Тело начинается со спецификации подпрограммы (которая является ее описанием без заключительной точки с запятой), за которой следует ключевое слово "is". Затем идут описания локальных переменных, ключевое слово "begin", исполняемые операторы и ключевое слово "end".

Ниже приведено простейшее тело подпрограммы, реализующее процедуру Average, описанную в предыдущем уроке. Заметим, что после слова `end' можно добавить имя завершаемой подпрограммы (компилятор Ada выполнит проверку, чтобы убедиться, что эти имена совпадают). Заметим, что знак операции присваивания в Аде записывается как `:=' (также, как и в Pascal):

procedure Average(A, B : in Integer; Result : out Integer) is
begin
 Result := (A + B) / 2;
end Average;

Между словами "is" и "begin" могут быть описаны локальные переменные и локальные подпрограммы. Они существуют ровно столько, сколько и подпрограмма, внутри которой они находятся. Локальные переменные выполняют функцию временного хранилища промежуточных результатов. Локальные переменные описываются так же, как и параметры: имя переменной (переменных), двоеточие и тип. Можно задать начальные значения переменных (следующий пример инициализирует локальную пременную `Total' значением A). Функции возвращают значения при помощи инструкции `return'. Пример:

function Sum(A, B : in Integer) return Integer is
 Total : Integer := A;
begin
 Total := Total + B;
 return Total;
end Sum;

А вот пример функции, вычисляющей сумму квадратов двух целых чисел. В ней используется локальная функция Square:

function Sum_Squares(A, B : in Integer) return Integer is

  function Square(X : in Integer) return Integer is
  begin -- начало функции Square
    return X*X;
  end Square;

begin -- начало функции Sum_Squares 
 return Square(A) + Square(B);
end Sum_Squares;

BNF описания подпрограммы выглядит следующим образом:

тело_подпрограммы ::= спецификация_подпрограммы "is"
                      раздел_описаний
                    "begin"
                      последовательность_инструкций
                    "end" [имя_подпрограммы] ";"

раздел_описаний ::= { элемент_описания }

элемент_описания ::= описание_объекта | тело_подпрограммы

описание_объекта ::= список_идентификаторов : [constant] тип [":=" выражение] ";"

Не вдаваясь в детали, сделаем замечание относительно последовательностей инструкций: подобно С, в Ada используется точка с запятой в качестве символа, завершающего инструкцию, т.е. каждая инструкция в Ada должна обязательно заканиваться точкой с запятой. В этом состоит отличие от Pascal, в котором точка с запятой используется в качестве разделителя инструкций.


Упражнение:

Какой из примеров в данном уроке содержит пустой раздел_описаний (т.е. не содержит локальных переменных или подпрограмм)?

  1. процедура Average
  2. функция Sum
  3. функция Sum_Squares

Вы можете также:

PREVIOUS Перейти к предыдущему разделу

NEXT     Перейти к следующему разделу

OUTLINE  Вернуться к содержанию Урока 4

David A. Wheeler (dwheeler@ida.org)

Перевод: Юрий Королев   Общая редакция перевода: Г.Ю. Сисюк

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s4sf.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org