В чем разница между подпрограммой и функцией?
Возможный дубликат:
В чем разница между процедурой 'function and a'?
Я искал в Интернете ответ на этот вопрос, и я получил ответ, что функция может возвращать значение, изменять значение и т.д., но подпрограмма не может. Но я не удовлетворен этим объяснением, и мне кажется, что разница должна быть не просто терминологией.
Итак, я ищу более концептуальный ответ на вопрос.
Ответы
Ответ 1
Функция отражает математическое определение функции, которая является отображением от 1 или более входов к значению. 1
Подпрограмма является универсальным термином для любого фрагмента кода, который имеет определенную точку входа и точку выхода.
Однако точное значение этих терминов будет варьироваться от контекста к контексту.
<Суб > 1. Очевидно, это не формальное математическое определение функции.
Ответ 2
Общее определение функции в языках программирования - это фрагмент кода, который принимает ноль или более входных значений и возвращает ноль или одно выходное значение.
Наиболее распространенное определение подпрограммы - это функция, которая ничего не возвращает и обычно ничего не принимает. Это всего лишь фрагмент кода с именем.
На самом деле в большинстве языков функции не отличаются тем, как вы их объявляете. Таким образом, подпрограмму можно назвать функцией, но функцию необязательно можно назвать подпрограммой.
Также есть люди, которые рассматривают функции и подпрограммы одно и то же с другим именем.
Подпрограмма - Википедия
Ответ 3
Стоит отметить, что добавление к @Oli отвечает, что в математическом смысле функция должна быть "четко определена", т.е. ее вывод уникально, определяемый его входами, тогда как этот часто это не относится к языкам программирования.
Те, кто делает эту гарантию (а также то, что их функции не вызывают побочных эффектов), называются чистыми функциональными языками, примером чего будучи Haskell. У них есть преимущество (среди прочего) в том, что их функции доказуемо правильны в их поведении, что обычно невозможно, если функции полагаются на внешнее состояние и/или имеют побочные эффекты.
Ответ 4
Функция должна возвращать некоторое значение и не должна изменять глобальную переменную или переменную, объявленную вне тела функции. В этой ситуации функция может имитировать только математическую часть счетчика (вещь, которая сопоставляет математический объект с другим математическим объектом)
Подпрограмма ничего не возвращает и обычно нечиста, так как ей нужно изменить какое-либо глобальное состояние или переменную, иначе нет смысла ее вызывать. Для подпрограммы нет математической параллели.