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?
terminology
Andrew Vit
fuente
fuente
function
mé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.Sub
es unFunction
sin valor de retorno. EnPython
puede 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.Respuestas:
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.
fuente
2 + 2
. Hay pequeñas excepciones como 1-arg como++arg
(prefijo) oarg++
(postfix). Aunque, no he visto muchos operadores de postfix ..Depende de los idiomas, qué puedes hacer con ellos.
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.
fuente
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).
fuente