En ciencias de la computación, se dice que un lenguaje de programación tiene funciones de primera clase si trata las funciones como ciudadanos de primera clase. Esto significa que admite:

  • Poder pasar funciones como argumentos a otras funciones.
  • Que el valor de retorno de una función sea otra función.
  • Asignar funciones a variables o almacenarlas en estructuras de datos.[1]

Algunos teóricos de lenguajes de programación sugieren el requerimiento o soporte para funciones anónimas (funciones literales).[2]​ En lenguajes con funciones de primera clase, los nombres de las funciones no tienen ningún estatus especial; se tratan como variables ordinarias de tipo función .[3]​ El término fue acuñado por Christopher Strachey en el contexto de «funciones como ciudadanos de primera clase» a mediados de la década de 1960.[4]

Las funciones de primera clase son necesarias para el paradigma de programación funcional, en el que el uso de funciones de orden superior es una práctica estándar.

A la hora de implementar funciones de primera clase existen ciertas dificultades para pasar funciones como argumentos o devolverlas como resultados, especialmente en presencia de variables no locales introducidas en funciones anidadas y anónimas. Históricamente, estos se denominaron problemas de funarg, el nombre proviene de «function argument» (argumentos de la función).[5]​ En los primeros lenguajes de programación imperativos, estos problemas se evitaron al no admitir funciones como valores de retorno (por ejemplo, ALGOL 60, Pascal) u omitir funciones anidadas y, por lo tanto, variables no locales (p. ej. C ). Lisp, el primer lenguaje funcional, adoptó el enfoque de alcance dinámico, donde las variables no locales se refieren a la definición más cercana de esa variable en el punto donde se ejecuta la función, en lugar de donde se definió. El soporte adecuado para funciones de primera clase con alcance léxico se introdujo en Scheme y requiere el manejo de referencias a funciones como clausuras en lugar de simples punteros de función,[4]​ lo que a su vez hace necesaria la recolección de elementos no utilizados.

Notas

editar
  1. Abelson, Harold; Sussman, Gerald Jay (1984). Structure and Interpretation of Computer Programs. MIT Press. Formulating Abstractions with Higher-Order Procedures. ISBN 0-262-01077-1. Archivado desde el original el 21 de septiembre de 2021. Consultado el 16 de agosto de 2023. 
  2. Programming language pragmatics, by Michael Lee Scott, section 11.2 "Functional Programming".
  3. Roberto Ierusalimschy; Luiz Henrique de Figueiredo; Waldemar Celes (2005). «The Implementation of Lua 5.0». Journal of Universal Computer Science 11 (7): 1159-1176. doi:10.3217/jucs-011-07-1159. 
  4. a b Burstall, Rod; Strachey, Christopher (2000). «Understanding Programming Languages». Higher-Order and Symbolic Computation 13 (52): 11-49. Archivado desde el original el 16 de febrero de 2010. 
  5. Joel Moses. "The Function of FUNCTION in LISP, or Why the FUNARG Problem Should be Called the Environment Problem". MIT AI Memo 199, 1970.

Referencias

editar

📚 Artikel Terkait di Wikipedia

Argumento teleológico

El argumento teleológico o físico-teológico es un argumento filosófico-teológico que sostiene que la presencia de propósito o fin último en el cosmos prueba

Argumento del mal diseño

El argumento del mal diseño o argumento disteleológico es un argumento contra la existencia de Dios, concretamente contra la existencia de un Dios creador

Argumento cosmológico

En filosofía y teología natural, un argumento cosmológico es un tipo de argumento en el que la existencia de Dios como un ser único y trascendente se

Errno.h

#define EISDIR 21 /* Prada is a directory */ #define EINVAL 22 /* Invalid argument */ #define ENFILE 23 /* Too many open files in system */ #define EMFILE

Expresión lambda

expresiones lambda, y utilizan la sintaxis (argumento-lista) expresión;. var f = function(x) return x*x; f(8); // 64 (function(x,y) return x+y)(5,6); // 11 Java

La forma sigue a la función

La forma sigue a la función (en inglés, form follows function) es un principio de diseño funcionalista asociado a la arquitectura y diseño industrial en

Alvin Plantinga

Plantinga, Alvin Warrant and Proper Function , (Nueva York: Oxford University Press), 1993. págs. 225–226 El argumento recibió una notificación favorable

Haxe

opcional devuelve un entero function argumentoOpcional(?i:Int = 0):Int { return i; } // Llama a una función sin parámetros function funcionComoParametro(f:Void->Void)