Книга: Описание языка PascalABC.NET
Описание процедур и функций
Разделы на этой странице:
Описание процедур и функций
Любая используемая в программе процедура или функция должна быть предварительно описана в разделе описаний.
Описание процедуры имеет вид:
procedure имя(список формальных параметров);
раздел описаний
begin
операторы
end;
Описание функции имеет вид:
function имя(список формальных параметров): тип возвращаемого значения;
раздел описаний
begin
операторы
end;
Операторы подпрограммы, окаймленные операторными скобками begin/end, называются телом этой подпрограммы.
Список формальных параметров вместе с окружающими скобками может отсутствовать. Он состоит из одной или нескольких секций, разделенных символом ;. Каждая секция состоит из списка переменных, перечисляемых через запятую, после которого следуют двоеточие и тип. Каждая секция может предваряться ключевым словом var или const, что указывает на то, что параметры передаются по ссылке (см.п. Параметры процедур и функций). Тип формального параметра должен быть либо именем, либо динамическим массивом, либо множеством, либо процедурной переменной (для последних трех типов имеет место структурная эквивалентность типов).
Раздел описаний процедуры или функции устроен так же, как и раздел описаний основной программы. Здесь описываются так называемые локальные переменные и константы, типы (за исключением классов - классы можно описывать только глобально) а также вложенные процедуры и функции. Все такие локальные объекты доступны лишь внутри данной подпрограммы и не видны извне.
В разделе описаний подпрограммы можно описывать другие подпрограммы. Исключение составляют методы класса, описываемые непосредственно в теле класса: в них нельзя описывать вложенные подпрограммы ввиду синтаксической неоднозначности.
Например:
procedure DoAdd(a,b: real; var res: real);
begin
res := a + b;
end;
Вызов подпрограммы
Подпрограмма один раз описывается и может быть многократно вызвана. Для вызова процедуры используется оператор вызова процедуры:
begin
var x := ReadInteger;
var y := ReadInteger;
var res: integer;
DoAdd(x,y,res);
Print(res);
DoAdd(2*x,y,res);
Print(res);
end;
Для вызова функции используется выражение вызова функции.
Переменная Result
Внутри тела любой функции определена специальная переменная с именем Result, которая хранит результат вычисления функции. Ее тип совпадает с типом возвращаемого значения функции. Например:
function Sum(a,b: real): real;
begin
Result := a + b;
end;
function MinElement(a: array of real): real;
begin
Result := real.MaxValue;
foreach var x in a do
if x < Result then
Result := x;
end;
begin
var a := Seq(1,5,3);
writeln(MinElement(a) + Sum(2,3));
end.
Если внутри функции не присвоить переменной Result некоторое значение, то функция вернет в результате своего вызова непредсказуемое значение.
Упрощенный синтаксис описания подпрограмм
В PascalABC.NET имеется упрощенный синтаксис описания однооператорных процедур и функций:
procedure WriteStar := write('*');
и
function Add(a,b: real): real := a + b;
При этом для возвращаемого значения функции возможен автовывод типов:
function Add(a,b: real) := a + b;
- Процедуры и функции: обзор
- Досрочный выход из процедуры или функции
- Параметры процедур и функций
- Повышение производительности приложений с помощью хранимых процедур
- Увеличение глубины рекурсии процедур и триггеров
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC
- Описание работы МП
- Описание разъемов МП
- Описание программы настройки BIOS
- Текстовые сообщения процедуры POST
- Описание работы ЦПУ
- Описание типов модулей оперативной памяти