Programacion funcional


En informática , la programación funcional es un paradigma de programación en el que los programas se construyen aplicando y componiendo funciones . Es un paradigma de programación declarativa en el que las definiciones de funciones son árboles de expresiones que asignan valores a otros valores, en lugar de una secuencia de declaraciones imperativas que actualizan el estado de ejecución del programa.

En la programación funcional, las funciones se tratan como ciudadanos de primera clase , lo que significa que pueden vincularse a nombres (incluidos identificadores locales ), pasarse como argumentos y devolverse desde otras funciones, al igual que cualquier otro tipo de datos . Esto permite que los programas se escriban en un estilo declarativo y componible , donde pequeñas funciones se combinan de manera modular .

La programación funcional a veces se trata como sinónimo de programación puramente funcional , un subconjunto de programación funcional que trata todas las funciones como funciones matemáticas deterministas o funciones puras . Cuando se llama a una función pura con algunos argumentos dados, siempre devolverá el mismo resultado y no puede verse afectada por ningún estado mutable u otros efectos secundarios . Esto contrasta con los procedimientos impuros , comunes en la programación imperativa., que puede tener efectos secundarios (como modificar el estado del programa o recibir información de un usuario). Los defensores de la programación puramente funcional afirman que al restringir los efectos secundarios, los programas pueden tener menos errores , ser más fáciles de depurar y probar y ser más adecuados para la verificación formal . [1] [2]

La programación funcional tiene sus raíces en la academia , evolucionando a partir del cálculo lambda , un sistema formal de cálculo basado únicamente en funciones. La programación funcional ha sido históricamente menos popular que la programación imperativa, pero muchos lenguajes funcionales se están utilizando hoy en día en la industria y la educación, incluidos Common Lisp , Scheme , [3] [4] [5] [6] Clojure , Wolfram Language , [7] [8] Raqueta , [9] Erlang , [10] [11] [12] Elixir , [13] OCaml , [14][15] Haskell , [16] [17] y F # . [18] [19] La programación funcional también es clave para algunos lenguajes que han tenido éxito en dominios específicos, como JavaScript en la Web, [20] R en estadísticas, [21] [22] J , K y Q en análisis financiero, y XQuery / XSLT para XML . [23] [24] Lenguajes declarativos específicos de dominio como SQL y Lex / Yaccutilizar algunos elementos de programación funcional, como no permitir valores mutables . [25] Además, muchos otros lenguajes de programación admiten la programación en un estilo funcional o han implementado características de la programación funcional, como C ++ 11 , C # , [26] Kotlin , [27] Perl , [28] PHP , [29 ] Python , [30] Go , [31] Rust , [32] Raku , [33] Scala , [34] y Java (desde Java 8) . [35]

El cálculo lambda , desarrollado en la década de 1930 por Alonzo Church , es un sistema formal de cálculo construido a partir de la aplicación de funciones . En 1937, Alan Turing demostró que el cálculo lambda y las máquinas de Turing son modelos equivalentes de cálculo, [36] mostrando que el cálculo lambda es de Turing completo . El cálculo lambda forma la base de todos los lenguajes de programación funcionales. Moses Schönfinkel y Haskell Curry desarrollaron una formulación teórica equivalente, la lógica combinatoria , en las décadas de 1920 y 1930. [37]

Church más tarde desarrolló un sistema más débil, el cálculo lambda de tipo simple , que extendió el cálculo lambda al asignar un tipo a todos los términos. [38] Esto forma la base para la programación funcional de tipo estático.