На этом шаге мы перечислим отличия процедур и функций.
Структура описания процедур и функций приведена в 16 шаге. Напомним формат заголовков процедур и функций:
procedure <Имя> (<Список Формальных Параметров>) ; function <Имя> (<Список Формальных Параметров>) : <Тип результата>;
Объявление и работа с процедурами и функциями отличаются в следующем:
- в заголовке функции помимо описания формальных параметров обязательно указывается тип возвращаемого ею результата;
- для возврата функцией значения в точку вызова среди ее операторов должен быть хотя бы один, в котором имени функции или переменной Result присваивается значение результата;
- вызов процедуры выполняется отдельным оператором;
- вызов функции может выполняться там, где допускается ставить выражение, в частности, в правой части оператора присваивания.
Помимо указанных отличий между процедурами и функциями отметим еще особенности реализации функций в языке Object Pascal.
В Object Pascal функция может возвращать значения практически любых типов (стандартных и определяемых пользователем), за исключением файловых и объектных типов "старой" объектной модели, объявляемых с помощью зарезервированного слова object.
Для возврата результата функцией введена специальная переменная Result, которая представляет собой неявно объявляемую локальную переменную, имеющую такой же тип, как и возвращаемое функцией значение. Присваивание значения переменной Result эквивалентно присваиванию имени функции.
Однако, в отличие от идентификатора функции, если Result встречается в правой части оператора присваивания, то происходит не рекурсивный вызов функции, а обращение к текущему значению Result.
На следующем шаге мы рассмотрим виды параметров и способы их передачи.