Método vs Función vs Procedimiento

95

Pregunta simple, pero a menudo escucho estos tres términos definidos con tanta ferocidad, pero se me ha dicho que significan cosas diferentes a lo largo de los años.

¿Cuáles son las definiciones "correctas" de "Procedimientos", "Métodos", "Función", "Subrutinas", etc.?

    
pregunta Django Reinhardt 23.11.2010 - 18:33

6 respuestas

94

Voy con una respuesta diferente aquí: prácticamente hablando, realmente no hay diferencia , con la pequeña excepción de que "método" generalmente se refiere a una subrutina asociada con un objeto en idiomas OO.

Los términos "procedimiento, función, subrutina, subprograma y método" realmente significan lo mismo: un subprograma que se puede llamar dentro de un programa más grande. Pero es difícil llegar a una definición que capture todos los usos variantes de estos términos, ya que no se usan de manera consistente en lenguajes de programación o paradigmas.

Se podría decir que una función devuelve un valor. Bueno, la siguiente función C no devuelve un valor:

void f() { return; }

... pero dudo que encuentres a alguien que lo llame procedimiento.

Claro, en Pascal, los procedimientos no devuelven valores y las funciones devuelven valores, pero eso es simplemente un reflejo de cómo se diseñó Pascal. En Fortran, una función devuelve un valor y una subrutina devuelve varios valores. Sin embargo, nada de esto realmente nos permite crear una definición "universal" para estos términos.

De hecho, el término "programación de procedimientos" se refiere a toda una clase de lenguajes, incluidos C, Fortran y Pascal, solo uno de los cuales usa el término "procedimiento" para significar algo.

Así que nada de esto es realmente consistente. La única excepción es probablemente el "método", que parece ser usado casi en su totalidad con lenguajes OO, en referencia a una función que está asociada con un objeto. Aunque, incluso esto no siempre es consistente. C ++, por ejemplo, generalmente usa el término "función miembro" en lugar del método, (aunque el término "método" se haya introducido en la lengua vernácula de C ++ entre los programadores).

El punto es que nada de esto es realmente consistente. Simplemente refleja la terminología empleada por los idiomas que están en boga en ese momento.

    
respondido por el Charles Salvia 23.11.2010 - 20:37
61

Una función devuelve un valor, pero un procedimiento no lo hace.

Un método es similar a una función, pero es interno a parte de una clase. El término método se usa casi exclusivamente en la programación orientada a objetos.

    
respondido por el Bruce Alderman 23.11.2010 - 18:41
48

Una función es algo que toma un montón de entradas y devuelve uno o más valores. Si los valores devueltos están totalmente determinados por las entradas, y la función no tiene ningún efecto secundario (el registro, quizás, o la causa de cambios de estado fuera de sí misma), se llama función pura.

Un procedimiento es una función que no devuelve un valor. En particular, esto significa que un procedimiento solo puede causar efectos secundarios. (¡Eso podría incluir mutar un parámetro de entrada!)

Un método es una función que se cierra sobre un conjunto de variables, es decir, un cierre . Toma cero o más parámetros de entrada, tiene acceso a este conjunto de variables y devuelve cero o más valores. En los idiomas OO, estos métodos se adjuntan a objetos o clases.

En la mayoría de los idiomas OO convencionales, esas variables cerradas se denominan campos miembros o variables de instancia de un objeto. Un método puede ser una función pura, una función impura o un procedimiento.

La última definición lleva a la correspondencia object = struct + closures .

    
respondido por el Frank Shearar 23.11.2010 - 18:59
14

Bruce tiene una buena respuesta . Yo añadiría, semánticamente:

  • Un procedimiento debe "hacer algo" a los argumentos o causar algún otro efecto secundario (por ejemplo, printf )
  • Una función debe (a) responder una pregunta sobre los argumentos, o (b) calcular un nuevo valor basado en los argumentos
  • Un método de función debe responder una pregunta sobre el estado del objeto
  • Un método de procedimiento debería cambiar el estado del objeto
respondido por el Scott Whitlock 23.11.2010 - 18:51
4

buenas respuestas detalladas arriba; La historia corta es que todos los sabores de subrutinas; lo que se entiende por cada término variará según el contexto del lenguaje de programación

en general, las funciones devuelven un valor, pero no tienen que hacerlo

los métodos son términos OOP genéricos actualmente

en SQL, los procedimientos almacenados tienen salidas, pero generalmente solo devuelven un código de error, mientras que las funciones definidas por el usuario deben devolver un valor (que puede ser un conjunto de resultados)

Nuevamente, la diferencia precisa entre estos términos depende de con quién estás hablando.

    
respondido por el Steven A. Lowe 24.11.2010 - 18:23
2

El 80% de la competencia está directamente relacionado con la familiaridad con la nomenclatura,

El 95% de la productividad es la capacidad de identificar lo que es útil en este momento a pesar de los términos utilizados para describirlo

Prefiero llamarlos todos los métodos en c # excepto cuando usé MSSQL tuvimos sproc's, pero por supuesto ahora usamos Postgres y se llaman funciones.

    
respondido por el MvcCmsJon 04.01.2013 - 23:39

Lea otras preguntas en las etiquetas

Comentarios Recientes

Qué usar frente a qué no usar Código de encapsulado Cuando vea una idea tan obviamente buena: una primera solución de arranque es otra cosa incorrecta. A lo sumo hay un orden, un conjunto de pasos para llegar al resultado correcto. Nunca inicie el cuadro con el cuadro main.map y luego coloque la nueva clave Ix del bucle. mapNunca coloque _setup y complete% hbreakpad% \ srv \ xmlen.plugin y nunca gaste solo una carga de redeclaración adicional de la biblioteca objecth por su atributo 'str'. Dejo esto implícito,... Lee mas