Пользователи, далекие от программирования в принципе, сталкиваются с понятиями функции и процедуры редко, и ассоциируются они с чем-то математическим и бюрократическо-медицинским. В программировании же этими понятиями оперирует множество языков, правда, даже специалисты порой не могут четко осознать разницу между функцией и процедурой. Как с тем сусликом: он есть, но его никто не видит. Посмотрим, настолько ли невидимы отличия.
Функция в программировании - подпрограмма, вызываемая из других подпрограмм необходимое число раз.
Процедура - поименованная часть программы (подпрограмма), многократно вызываемая из последующих частей программы необходимое число раз.
Основная разница между функцией и процедурой - в возвращаемом результате. По сути, и функции, и процедуры представляют собой логически неделимые блоки, из которых складывается код программы. Функция возвращает значение, процедура в большинстве языков программирования - нет, либо (в Си, например) возвращает пустое значение. В последнем случае (в Си) процедура считается подчиненной разновидностью функции.
Заголовок функции содержит слово “function”, идентификатор (собственное имя функции), вариативно список параметров и обязательно - тип результата. В теле функции обязательно прописывается оператор, присваивающий значение имени функции, которое она вернет в качестве результата. Заголовок процедуры содержит слово “procedure”, идентификатор (имя процедуры) и вариативно список параметров. Вызов функции осуществляется в составе выражений там, где эти выражения применяются, вызов процедуры требует отдельного оператора. Вызов процедуры осуществляется только по имени, имя функции же связано с ее значением. На схемах алгоритмов вызов функции изображается в блоке вывода или в блоке процесса, вызов процедуры - в специальном блоке “предопределенный процесс”.
Функция возвращает значение, процедура - нет.
Заголовок функции обязательно содержит тип результата.
В теле функции обязательно наличие оператора, присваивающего значение имени функции.
Вызов процедуры требует отдельного оператора, вызов функции возможен в составе выражений.
Имя процедуры необходимо для вызова, имя функции - для присвоения значения.
На схемах алгоритмов вызов процедуры изображается в отдельном блоке, вызов функции - в блоке процесса или вывода.