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