Pascal. Подпрограммы: процедуры и функции - 2


Функция - это подпрограмма, которая возвращает результат (число, символьную строку и др.)

Представьте, что вы заказали товар в Интернет-магазине. С точки зрения программирования Вы вызвали некоторую подпрограмму, и в отличие от процедуры эта подпрограмма должна вернуть результат - доставить Вам товар, который Вы заказали. Вот такие подпрограммы и называются функциями.
Оформляется функция почти так же, как и процедура:
function <имя функции>(список параметров в виде <имя переменной>:<её тип> через точку с запятой): <тип возвращаемого значения>;
begin
    <тело функции>
end;

Отличие функции от процедуры состоит в том, что функция обязательно должна возвращать значение. Для этого необходимо использовать имя функции как переменную или же специальную переменную Result:
function Sum(a, b:integer): integer;
begin
    Sum := a + b;
end;
или
function Sum(a, b:integer): integer;
begin
    Result := a + b;
end;

Функция, которая возвращает среднее арифметическое двух целых чисел, будет выглядеть таким образом:
function average(a, b: integer): real;
begin
    average := (a + b) / 2;
end;
Осталось понять, как вызвать эту функцию в основной программе:
Не следует вызывать функцию также как, и процедуру:
average(10, 5); 
Значение, которое вернет функция, потеряется. Это как будто бы товар из Интернет-магазина никому не вручили, а выбросили. Вряд ли это понравится заказчику.

Правильнее сохранить результат в переменной (или вывести его на экран):
a := average(10, 5); 

или

writeln(average(10, 5));

Часто программисты используют логические функции, которые возвращают логические значения: истину или ложь (True или False)
Такие функции полезны для того, чтобы  проверить какое-либо свойство.
Рассмотрим два примера записи логической функции, которая проверяет число на четность
1)  Лучший способ:
результат выражения
n % 2 == 0
будет истина (True) или ложь (False)
Не нужно писать условный оператор!
2) Так лучше не делать!
Можно и так записать, но получится более длинная запись, поэтому так лучше не делать
bool isEven(int n)
{
    return (n % 2 == 0);
}
bool isEven(int n)
{
    if (n % 2 == 0)
        return True;
    else
        return False;
}

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