2012-04-30 5 views
9

Можно создать дубликат:
What is the difference between a ‘function’ and a ‘procedure’?В чем разница между подпрограммой и функцией?

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

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

+0

Не совсем. Это единственное важное различие. Возможно, еще одно - современные языки (C, Java, PHP и т. Д.) Не используют подпрограммы, а только функции. В противном случае я бы сказал, что технические детали одинаковы: в основном сборка команд «вызов» или «jmp». –

+1

См. Также: [Что такое сопрограмма?] (Http://stackoverflow.com/q/553704/974555) и [В чем разница между методом и функцией?] (Http://stackoverflow.com/ q/155609/974555) – gerrit

ответ

23

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

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

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


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

+0

Вау! Вот что я искал! Благодаря! – CodeBlue

+2

Функция * true * не имеет побочных эффектов. –

0

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

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

5

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

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

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

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

Subroutine - Wikipedia

4

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

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

Смежные вопросы