В чем разница между подпрограммой и функцией?

Возможный дубликат:
В чем разница между процедурой 'function and a'?

Я искал в Интернете ответ на этот вопрос, и я получил ответ, что функция может возвращать значение, изменять значение и т.д., но подпрограмма не может. Но я не удовлетворен этим объяснением, и мне кажется, что разница должна быть не просто терминологией.

Итак, я ищу более концептуальный ответ на вопрос.

Ответ 1

Функция отражает математическое определение функции, которая является отображением от 1 или более входов к значению. 1

Подпрограмма является универсальным термином для любого фрагмента кода, который имеет определенную точку входа и точку выхода.

Однако точное значение этих терминов будет варьироваться от контекста к контексту.


<Суб > 1. Очевидно, это не формальное математическое определение функции.

Ответ 2

Общее определение функции в языках программирования - это фрагмент кода, который принимает ноль или более входных значений и возвращает ноль или одно выходное значение.

Наиболее распространенное определение подпрограммы - это функция, которая ничего не возвращает и обычно ничего не принимает. Это всего лишь фрагмент кода с именем.

На самом деле в большинстве языков функции не отличаются тем, как вы их объявляете. Таким образом, подпрограмму можно назвать функцией, но функцию необязательно можно назвать подпрограммой.

Также есть люди, которые рассматривают функции и подпрограммы одно и то же с другим именем.

Подпрограмма - Википедия

Ответ 3

Стоит отметить, что добавление к @Oli отвечает, что в математическом смысле функция должна быть "четко определена", т.е. ее вывод уникально, определяемый его входами, тогда как этот часто это не относится к языкам программирования.

Те, кто делает эту гарантию (а также то, что их функции не вызывают побочных эффектов), называются чистыми функциональными языками, примером чего будучи Haskell. У них есть преимущество (среди прочего) в том, что их функции доказуемо правильны в их поведении, что обычно невозможно, если функции полагаются на внешнее состояние и/или имеют побочные эффекты.

Ответ 4

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

Подпрограмма ничего не возвращает и обычно нечиста, так как ей нужно изменить какое-либо глобальное состояние или переменную, иначе нет смысла ее вызывать. Для подпрограммы нет математической параллели.