Раздел 4.2 - Описания подпрограмм и параметры

Давайте рассмотрим, как необходимо описывать подпрограмму (процедуру или функцию). Главное отличие между процедурой и функцией состоит в том, что функция возвращает значение, а процедура - нет (хотя процедура может изменять значения переданных ей параметров). Далее приведен пример описания процедуры с именем Average, которая на входе получает два значения (с именами A и B) и изменяет третью переменную ( с именем Result, которая содержит результат):

procedure Average(A, B : in Integer; Result : out Integer);

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

function Average_Two(A, B : in Integer) return Integer;

Обратите внимание на ключевые слова `in' и `out'. Они указывают на вид параметров. Существует три возможных вида параметров:

  1. `in' - значением параметра можно оперировать, но не изменять.
  2. `out' - значение параметра можно изменять, но не оперировать им.
  3. `in out' - значение параметра можно использовать и/или изменять.

По умолчанию устанавливается вид `in', но рекомендуется всегда указывать необходимый вид параметра.

Ниже приведена BNF описания подпрограмм:

описание_подпрограммы ::= спецификация_подпрограммы ";"

спецификация_подпрограммы ::= "procedure" имя_процедуры описание_параметров | 
                 "function" имя_процедуры описание_параметров "return" тип

описание_параметров ::= [ "(" спецификация_параметра
                            { ";" спецификация_параметра} ")" ]

спецификация_параметра ::= список_имен_параметров ":" вид_параметра
                            [ ":=" значение_по_умолчанию ]

тип_параметра ::= [ "in" ] | "out" | "in" "out"

список_имен_параметров ::= идентификатор { "," идентификатор }

имя_процедуры ::= идентификатор

Упражнение:

Что из нижеследующего не является корректным описанием подпрограммы?

  1. procedure Delete_File( in Integer : A );
  2. procedure Initialize;
  3. function Middle_Value( A, B, C : in Integer ) return Integer;

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

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

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

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

David A. Wheeler (dwheeler@ida.org)

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

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

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