Функции (PascalABC.NET)

Материал из Информационная безопасностя
Версия от 19:56, 21 мая 2023; Безуглов Сергей (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Функция, в отличие от процедуры, возвращает некоторое значение. Эта особенность функций отражается в их описании.

1 function Имя(параметр1; параметр2; ): тип;
2 begin
3  тело функции, обязательно с переменной Result
4 end;

При описании функции нужно указать тип возвращаемого ею значения. В теле функции всегда присутствует переменная Result, которая не описывается, но обязательно должна получить некоторое значение, которое и будет считаться результатом вычисления функции. Как и в старом Паскале вернуть значение из функции можно присвоив это значение переменной совпадающей по имени с названием функции. Как и процедура, функция может принимать параметры по значению и по ссылке. Функция может не иметь параметров.

В качестве примера рассмотрим реализацию функции Sqrt3(x), вычисляющей значение кубического корня аргумента.
1 function Sqrt3(x: real): real;
2 begin
3   Result := Sign(x) * Abs(x) ** (1 / 3);
4 end;

Здесь абсолютная величина аргумента возводится в степень ⅓ и к результату приписывается знак аргумента.

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

1 begin
2   Println(Sqrt3(2.0));
3   Println(Sqrt3(8.0));
4   Println(Sqrt3(-8.0));
5   Println(Sqrt3(153.642));
6   Println(Sqrt3(4913));
7 end.
1.25992104989487
2
-2
5.35595168436603
17

Обратите внимание на последний вызов. В качестве аргумента указано значение 4913, а не 4913.0, т.е. аргумент имеет тип integer, а не real, как в описании функции. Но еще мы говорили о том, что тип integer при необходимости автоматически приводится компилятором к типу real (но не наоборот). Это и произошло. А можно написать что-то типа Sqrt3(a > 0)? Нет, потому что a > 0 – это логическое выражение, а тип boolean не приводится к real и компилятор зафиксирует ошибку.