programación funcional
es un paradigma
de programación declarativa basado en el uso
de funciones
matemáticas, en contraste con la programación imperativa,
que enfatiza los cambios de estado mediante la mutación de variables. La
programación funcional tiene sus raíces en el cálculo lambda, un
sistema formal desarrollado en los años 1930 para investigar la definición de
función, la aplicación de las funciones y la recursión. Muchos lenguajes de
programación funcionales pueden ser vistos como elaboraciones del cálculo
lambda.
En la práctica, la diferencia entre una función matemática y la noción de
una "función" utilizada en la programación imperativa, es que las
funciones imperativas pueden tener efectos secundarios, como cambiar el valor
de cálculos realizados previamente. Por esta razón, carecen de transparencia
referencial; es decir, la misma expresión sintáctica puede resultar en valores
diferentes en varios momentos de la ejecución del programa. Con código
funcional, en contraste, el valor generado por una función depende
exclusivamente de los argumentos alimentados a la función. Al eliminar los efectos
secundarios se puede entender y predecir el comportamiento de un programa mucho
más fácilmente. Esta es una de las principales motivaciones para utilizar la
programación funcional.
Los lenguajes de programación funcional, especialmente los puramente
funcionales, han sido enfatizados en el ambiente académico y no tanto en el
desarrollo comercial o industrial. Sin embargo, lenguajes de programación
funcional como Scheme, Erlang, Rust, Objective
Caml, Scala, F# y Haskell,
han sido utilizados en aplicaciones comerciales e industriales por muchas
organizaciones. La programación funcional también es utilizada en la industria
a través de lenguajes de dominio específico como R (estadística), Mathematica
(matemáticas simbólicas), J y K (análisis financiero).
Los lenguajes de uso específico usados comúnmente como SQL y Lex/Yacc,
utilizan algunos elementos de programación funcional, especialmente al procesar
valores mutables. Las hojas de cálculo también pueden ser consideradas
lenguajes de programación funcional.
La programación funcional también puede ser desarrollada en lenguajes que
no están diseñados específicamente para la programación funcional. En el caso
de Perl,
por ejemplo, que es un lenguaje de programación imperativo, existe un libro que
describe como aplicar conceptos de programación funcional. JavaScript,
uno de los lenguajes más ampliamente utilizados en la actualidad, también
incorpora capacidades de programación funcional. Python también
incorpora particularidades de los lenguajes funcionales como listas de
comprensión y funciones de tratamiento de listas como matemática de conjuntos.
Java en su versión 8, está incorporando la programación funcional, así como el
uso de las expresiones lambda.
Los programas escritos en un
lenguaje funcional están constituidos únicamente por definiciones de funciones,
entendiendo estas no como subprogramas clásicos de un lenguaje imperativo, sino
como funciones puramente matemáticas, en las que se verifican ciertas
propiedades como la transparencia referencial (el
significado de una expresión depende únicamente del significado de sus
subexpresiones), y por tanto, la carencia total de efectos
colaterales.
Otras características propias de estos lenguajes son la no existencia de
asignaciones de variables y la falta de construcciones estructuradas como la
secuencia o la iteración (lo que obliga en la práctica a que todas las
repeticiones de instrucciones se lleven a cabo por medio de funciones
recursivas).
Existen dos grandes categorías de lenguajes funcionales: los
funcionales puros y los híbridos. La diferencia
entre ambos estriba en que los lenguajes funcionales híbridos son menos
dogmáticos que los puros, al admitir conceptos tomados de los lenguajes
imperativos, como las secuencias de instrucciones o la asignación de
variables. En contraste, los lenguajes funcionales puros tienen una mayor
potencia expresiva, conservando a la vez su transparencia referencial, algo que
no se cumple siempre con un lenguaje funcional híbrido.
Ventajas de usar un paradigma funcional
Ausencia de efectos colaterales.
Proceso de depuración menos problemático.
Pruebas de unidades más confiables.
Mayor facilidad para la ejecución concurrente
Comentarios
Publicar un comentario