¿Qué es la programación funcional?
La programación funcional es un paradigma de programación donde la base de la computación es la evaluación de expresiones. Algunas características son el uso de funciones de orden superior, transparencia referencial y evaluación perezosa. Las ventajas del estilo de programación incluyen que los programas son fáciles de leer, son muy confiables y se pueden dividir en componentes. Las desventajas son que los cálculos pueden ser lentos y el estilo y la sintaxis son completamente diferentes de otros estilos de programación comunes. El estilo de programación funcional lo adoptan con mayor frecuencia los académicos que los profesionales de la informática.
Como su nombre indica, las funciones son una parte fundamental de este paradigma de programación. Las funciones pueden estar anidadas dentro de otras funciones, llamadas funciones de orden superior, y cada función de orden superior se puede dividir en funciones de bloques de construcción que son fáciles de entender y depurar. Ejemplos de algunas funciones de orden superior son Map y Nest. La función Map toma una función F y la lista de variables, por ejemplo (x, y, z) y da el resultado en una lista: Map [F, (x, y, z)] = (F (x), F (y), F (z)). Nest toma la función F, la variable x y el número de iteraciones: Nest [F, x, 3] = F (F (F (x))).
La programación funcional pura toma una entrada y devuelve una salida sin cambiar nunca el estado de una variable. En otras palabras, una función con la misma entrada siempre dará los mismos resultados independientemente de lo que haya ocurrido previamente en el programa. Esto se llama transparencia referencial. Dado que las funciones matemáticas son referencialmente transparentes, la programación funcional es intuitiva para muchos matemáticos, ingenieros y científicos.
La transparencia referencial de las funciones significa que el orden de evaluación de funciones no es importante. Por lo tanto, no es necesario evaluar las funciones hasta que se necesiten sus resultados, lo que se denomina evaluación diferida. Esto está en completo contraste con la programación imperativa, donde un programa comienza con el primer comando y recorre la lista hasta el último comando. La evaluación diferida omite partes del programa que no siguen lógicamente o son superfluas, lo que optimiza automáticamente el programa y puede reducir el tiempo de computación.
La programación funcional tiene muchas ventajas sobre otros paradigmas de programación. Las funciones con entradas y salidas claras son fáciles de leer y comprender. Una vez que una función se depura completamente, se puede usar de manera confiable en otras aplicaciones. Las máquinas multinúcleo pueden calcular funciones que se evalúan independientemente en paralelo, mejorando drásticamente el rendimiento de los programas.
Desafortunadamente, no todos los programas se prestan a la computación paralela, y los programas funcionales de computación pueden ser bastante lentos. Los programas funcionales dependen en gran medida de la recursividad, que a menudo es menos eficiente que el uso de bucles tradicionales o métodos de iteración. De hecho, la programación funcional puede ser bastante torpe y difícil de aprender, ya que no se parece a otros paradigmas más comunes, como la programación orientada a objetos.
Los académicos tienden a favorecer la programación funcional, ya que proporciona una forma clara y comprensible de programar problemas complejos del mundo real. Algunos idiomas puros son Haskell y Erlang. Mathematica se especializa en matemática simbólica, R se especializa en estadística y J se especializa en análisis financiero. Los lenguajes multiparadigm como Scala y F # admiten tanto la programación funcional como otros estilos de programación.