Функции (PascalABC.NET)
Функция, в отличие от процедуры, возвращает некоторое значение. Эта особенность функций отражается в их описании.
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 и компилятор зафиксирует ошибку.