Funciones de primera clase

Funciones de primera clase de Python

En Go, las funciones son valores de primera clase. Esto significa que puedes hacer con las funciones lo mismo que puedes hacer con todos los demás valores: asignar funciones a variables, pasarlas como argumentos a otras funciones o incluso devolver funciones desde otras funciones.

El uso de valores de función es posible gracias a los tipos de función en Go. Un tipo de función denota el conjunto de todas las funciones con la misma secuencia de tipos de parámetros y la misma secuencia de tipos de resultados. Los tipos definidos por el usuario pueden ser declarados sobre los tipos de función. Por ejemplo, la función de diálogo de los ejemplos anteriores puede actualizarse como sigue:

Otra poderosa herramienta que está disponible gracias al soporte de las funciones de primera clase son las funciones anónimas. Las funciones anónimas se definen en su punto de uso, sin un nombre que siga a la palabra clave func. Estas funciones tienen acceso a las variables de la función que las encierra.

Una llamada a fib declara las variables n1 y n2 y devuelve una función anónima que, a su vez, cambia los valores de estas variables cada vez que se llama a la función. Las llamadas a la función anónima devuelven el número N de la secuencia de Fibonacci empezando por 0. La función anónima interna tiene acceso a las variables locales (n1 y n2) de la función adjunta fib. Esta es una buena manera de hacer que los valores de la función mantengan el estado entre las llamadas. Decimos que la función anónima es un cierre de las variables n1 y n2. Los cierres son ampliamente utilizados en la programación y es posible que veas que otros lenguajes los soportan.

Funciones de orden superior

El tipo explícito para el valor «myDouble» era necesario para distinguirlo como un valor de función y no como una invocación de función. Una forma alternativa de definir valores de función, asignados con una función, es con el operador comodín, _.NotaLos tipos de función con un solo parámetro pueden omitir los paréntesis. Por ejemplo, una función que toma y devuelve un único número entero puede escribirse como el tipo Int => Int.Syntax: Asignación de una función con el operador comodínval <identificador> = <nombre de la función> _Probemos esto con el valor de la función «miDoble»:scala> def double(x: Int): Int = x * 2

cantidad: Int = 40Esta vez, el tipo de función explícito para miDoble no era necesario para distinguirlo de una invocación de función. El guión bajo (_) sirvió como marcador de posición para una futura invocación de la función, devolviendo un valor de la función que podríamos almacenar en miDoble.Volvamos a revisar el tipo de función explícita de nuevo para explorar las funciones con múltiples entradas. Un tipo de función con múltiples entradas requiere paréntesis explícitos alrededor de los tipos de entrada, lo que termina teniendo la apariencia de una definición de función sin nombres de parámetros.Aquí hay un ejemplo de un valor de función definido con un tipo de función explícito usando múltiples parámetros, encerrado con paréntesis:scala> def max(a: Int, b: Int) = if (a > b) a else b

Ciudadano de primera clase

En informática, se dice que un lenguaje de programación tiene funciones de primera clase si trata a las funciones como ciudadanos de primera clase. Esto significa que el lenguaje admite pasar funciones como argumentos a otras funciones, devolverlas como valores de otras funciones y asignarlas a variables o almacenarlas en estructuras de datos[1]. Algunos teóricos de los lenguajes de programación exigen que se admitan también funciones anónimas (literales de función)[2] En los lenguajes con funciones de primera clase, los nombres de las funciones no tienen ningún estatus especial; se tratan como variables ordinarias con un tipo de 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 los años 60[4].

Las funciones de primera clase son una necesidad para el estilo de programación funcional, en el que el uso de funciones de orden superior es una práctica habitual. Un ejemplo sencillo de función de orden superior es la función map, que toma, como argumentos, una función y una lista, y devuelve la lista formada al aplicar la función a cada miembro de la lista. Para que un lenguaje admita la función map, debe admitir el paso de una función como argumento.

Función en función javascript

El concepto de funciones de primera clase es que las funciones no son diferentes de cualquier otro dato utilizado en un programa. Esto significa que las funciones pueden ser usadas como argumentos y también devueltas como valores de otras funciones. Esta es una característica engañosamente poderosa para un lenguaje de programación. Te permite abstraer cualquier cómputo repetitivo de tu código, y en última instancia te permite escribir funciones que efectivamente escriben otras funciones.

Más tarde descubrimos que necesitamos dos funciones más: doubleEven y squareEven, que duplican y elevan al cuadrado los números pares respectivamente. Estas serían funciones fáciles de escribir dado que sabemos cómo escribir incEven:

Aunque estas funciones eran fáciles de escribir, las tres son casi idénticas. La única diferencia es el comportamiento de incrementar, duplicar y elevar al cuadrado. Lo que hemos descubierto aquí es un patrón general de cálculo que podemos abstraer. La clave que necesitamos para hacer esto es la capacidad de pasar una función como argumento para realizar el comportamiento deseado.