¿Cuáles son los significados específicos de los términos: funciones, métodos, procedimientos y subrutinas?

11

Me pregunto cuáles son las diferencias específicas en la terminología que utilizamos para agrupar partes de código relacionadas. A veces he visto los términos usados ​​indistintamente: muchos lenguajes OO incluso usan la palabra clave "función" para definir un método. (¿Por qué?)

Si quisieras ser preciso, ¿cuáles son los significados específicos de cada uno? ¿O es simplemente como lo llama cada idioma?

Andrew Vit
fuente
Los únicos dos idiomas que conozco que usan los functionmétodos son JavaScript y PHP. Ambos usan la misma palabra clave para métodos que no son métodos (funciones libres), y en el caso de JavaScript no hay realmente una distinción entre funciones y métodos, al menos no a nivel de lenguaje.
Ejemplos: en VB.Net Subes un Functionsin valor de retorno. En Pythonpuede tener una función que no es parte de ninguna clase, por lo que no es un método. También puede declarar funciones dentro de funciones, y también puede hacerlo en C #. A veces tienen nombres diferentes por la misma razón que las manzanas y las piñas: porque son diferentes.
Trabajo
¿Qué has encontrado hasta ahora que te hace pensar que hay una discrepancia?
JeffO

Respuestas:

20
  • subprograma, subrutina
    "subrutina" probablemente proviene del lenguaje ensamblador. Algunos procesadores incluyen instrucciones para admitir subrutinas como una forma de organizar el código y reutilizar secciones comunes de código. Por ejemplo, el procesador 6502 tenía instrucciones JSR (salto a subrutina) y RTS (retorno de subrutina). Recuerdo que también se usaba mucho en programación estructurada, en la que un programa es una jerarquía de unidades de código que a veces se llamaban subrutinas o subprogramas. En mi opinión, estos son los términos más genéricos para alguna unidad de código a la que el control se transfiere temporalmente con el fin de completar una tarea determinada.

  • función, procedimiento
    A menudo se usan indistintamente, pero en algunos idiomas hay una distinción. En Pascal, una función es un subprograma que devuelve un valor, mientras que un procedimiento es un subprograma que no lo hace. En C y lenguajes relacionados, cada subprograma tiene un tipo de retorno (incluso si es void), por lo que no hay distinción.

  • método, función miembro
    Estos son dos nombres para la misma cosa: esencialmente una función asociada con una clase u objeto dado.

  • operador
    Cada idioma tiene un conjunto de operadores integrados. En algunos lenguajes, como C ++, los operadores son funciones que pueden anularse (es decir, reemplazarse) y / o sobrecargarse (es decir, definirse para nuevos tipos).

  • función anónima
    Esto se refiere a una función sin nombre. Las funciones anónimas son esencialmente bloques de código que pueden asignarse a variables o pasarse como parámetros para su uso posterior, por ejemplo, como una rutina de finalización.

  • cierre, expresión lambda, bloque
    Un cierre es un fragmento de código que está vinculado a un conjunto de variables. Pienso en los cierres como funciones anónimas más contexto.

Caleb
fuente
44
No todos los idiomas vienen con operadores integrados. Algunos, como Scheme y Haskell, simplemente le permiten definir funciones con nombres como '+' o '>> ='. Además, probablemente debería agregar que en algunos idiomas (como Scheme), "función" implica transparencia referencial (por ejemplo, siempre devuelve el mismo valor para la misma entrada sin efectos secundarios) mientras que el procedimiento no lo hace. De lo contrario, gran respuesta.
Tikhon Jelvis
Hasta ahora puedo recordar que los "operadores" se utilizaron principalmente para funciones con 2 argumentos. Eran infijo (operador entre argumentos:) 2 + 2. Hay pequeñas excepciones como 1-arg como ++arg(prefijo) o arg++(postfix). Aunque, no he visto muchos operadores de postfix ..
Darek Nędza
-1

Depende de los idiomas, qué puedes hacer con ellos.

  • necesitas una distinción
  • ¿Hay una distinción en la sintaxis, o es solo conveniencia, cuando se habla de código

AFAIK, en Básico, si llama a algo, que no devuelve nada, pero realiza un trabajo con efectos secundarios, como imprimir, escribir en un archivo o cambiar una variable global, se denominó procedimiento.

Si devuelve algo, se llama una función.

En un lenguaje OOP como Java, rara vez conocí el término 'función', pero 'método', y se me enseñó que las funciones son cosas que son globales y que todos pueden llamarlas.

En la escala funcional y del lenguaje OOP, un método no se llama función, pero puede pasar tal cosa a otro método, y luego se convierte en una función.

Una subrutina es una rutina, que es llamada por otra rutina, a mi entender.

En resumen, no creo que haya una definición concisa sobre todos los idiomas y más aún paradigmas. Debes considerar la cultura específica en la que te encuentras si usas estos términos; tal vez deberías introducir tu definición primero.

usuario desconocido
fuente
-1

Diría que según el contexto, todas esas palabras podrían significar lo mismo o cosas muy diferentes, por ejemplo, lo que Caleb ha escrito (pero hay más, es decir, idiomas en los que los operadores son funciones de primera clase, etc.). Por lo tanto, es difícil dar una definición específica, y es aconsejable no asumir demasiado a menos que se conozca el contexto (lenguaje de programación).

AnoE
fuente