2012-04-30 43 views
9

Duplicar posible:
What is the difference between a ‘function’ and a ‘procedure’?¿Cuál es la diferencia entre una subrutina y una función?

I búsquedas en línea para una respuesta a esta pregunta, y la respuesta que obtuve fue que una función puede devolver un valor, modificar un valor, etc. , pero una subrutina no puede. Pero no estoy satisfecho con esta explicación y me parece que la diferencia debería ser más que una cuestión de terminología.

Así que estoy buscando una respuesta más conceptual a la pregunta.

+0

No realmente. Esa es la única diferencia importante. Quizás otra cosa es que los lenguajes modernos (C, Java, PHP, etc.) no usan subrutinas sino funciones. De lo contrario, diría que los detalles técnicos son los mismos: la instrucción de ensamblaje 'call' o 'jmp', básicamente. –

+1

Vea también: [¿Qué es una coroutine?] (Http://stackoverflow.com/q/553704/974555), y [¿Cuál es la diferencia entre un método y una función?] (Http://stackoverflow.com/ q/155609/974555) – gerrit

Respuesta

23

Una función refleja la definición matemática de una función, que es un mapeo de 1 o más entradas a un valor.

Una subrutina es un término de propósito general para cualquier fragmento de código que tenga un punto de entrada y salida definido.

Sin embargo, el significado preciso de estos términos variará según el contexto.


1. Obviamente, esta no es la definición matemática formal de una función.

+0

¡Guau! ¡Ahora eso es lo que estaba buscando! ¡Gracias! – CodeBlue

+2

Una función * verdadera * no tiene efectos secundarios, sin embargo. –

0

Una función debe devolver algún valor y no debe cambiar una variable global o una variable declarada fuera del cuerpo de la función. En esta situación, una función solo puede imitar su contraparte matemática (lo que asigna un objeto matemático a otro objeto matemático)

Una subrutina no devuelve nada y suele ser impura, ya que tiene que cambiar algún estado global o variable; de ​​lo contrario, no tiene sentido llamarlo. No hay paralelo matemático para una subrutina.

5

Una definición genérica de función en lenguajes de programación es un código que acepta cero o más valores de entrada y devuelve cero o un valor de salida. La definición más común de subrutina es una función que no devuelve nada y normalmente no acepta nada. Es solo una pieza de código con un nombre.

En realidad, en la mayoría de los idiomas las funciones no difieren en la forma en que las declaras. Por lo tanto, una subrutina se puede llamar función, pero una función no necesariamente se puede llamar subrutina.

También hay personas que consideran funciones y subrutinas lo mismo con un nombre diferente.

Subroutine - Wikipedia

4

Vale la pena señalar como adición al @ respuesta de Oli que, en el sentido matemático una función debe ser "bien definido", es decir, su salida es única determinado por sus entradas, mientras esto a menudo no es el caso en los lenguajes de programación.

Los que do hacen esta garantía (y también que sus funciones no causan efectos secundarios) se llaman pure functional languages, un ejemplo de lo cual es Haskell.Tienen la ventaja (entre otras) de que sus funciones son probablemente correctas en su comportamiento, lo que generalmente no es posible si las funciones se basan en un estado externo y/o tienen efectos secundarios.

Cuestiones relacionadas