Ниже приведено простейшее тело подпрограммы, реализующее процедуру 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, в котором точка с запятой используется в качестве разделителя инструкций.
Какой из примеров в данном уроке содержит пустой раздел_описаний (т.е. не содержит локальных переменных или подпрограмм)?
|
|
|
|
|---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s4sf.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк