La programación funcional es un paradigma de programación que trata la computación como la evaluación de funciones puras donde las variables son inmutables. Algunos lenguajes funcionales incluyen Java 8, Groovy, Swift, Scala y Clojure. La programación funcional ofrece ventajas como programas más fáciles de probar, depurar y mantener, así como una mejor capacidad para la computación concurrente y paralela.
Programación funcional, una nueva forma de resolver problemas.
1. 4 www.coiicv.org
Bit@cora Febrero 2016
La programación funcional es un paradigma
de programación que trata la computación
como la evaluación de funciones donde las
variables no tienen estado y son inmuta-
bles. Básicamente, consiste en programar
con funciones puras, es decir funciones que
reciben valores de entrada, devuelven valo-
res de salida y no tienen efectos colaterales.
A diferencia de otros paradigmas, la progra-
mación funcional elige prescindir de datos
de estado o mutables para centrarse en la
resolución de problemas mediante mecanis-
mos puramente matemáticos. Este concepto
choca principalmente con las bases de los
paradigmas imperativos, ya que éstos se
basan en la aplicación de dichos estados y
de sus cambios para la automatización a la
hora de resolver una operación.
El paradigma funcional enfatiza la utilización
de funciones puras o de orden superior, es
decir, funciones que no tengan efectos se-
cundarios que no manejan datos mutables o
de estado. Una de las buenas prácticas que
hace al estilo funcional es siempre tratar de
evitar los efectos secundarios, es decir, evi-
tar que las funciones modifiquen los valores
de sus parámetros.
Lenguajes funcionales
Entre los lenguajes que implementan la
programación funcional podemos destacar:
Java 8, Groovy, Swift, Scala, Clojure.
Uno de los nuevos componentes más im-
portantes de la versión 8 de Java es el so-
porte para el uso de expresiones lambda
mediante funciones anónimas o closures. El
objetivo de estas expresiones es hacer que
Java como lenguaje orientado a objetos ad-
quiera también capacidades funcionales.
Una de las características más importantes
de las expresiones lambda es que permite
pasar funciones como parámetros de otras
funciones. Algunas de las mejoras más in-
teresantes son la posibilidad de dejar de
escribir clases anónimas y la simplificación
de iteraciones y operaciones sobre listas y
colecciones de datos.
En Java 8 podemos destacar también el
Stream API, que presenta algunas carac-
terísticas novedosas como la creación de
streams que permiten el procesamiento de
datos en paralelo mejorando la performan-
ce de una manera simple y transparente.
Groovy es un lenguaje orientado a objetos,
dinámico y 100% interoperable con Java.
Programación funcional, una nueva forma
de resolver problemas.
José Manuel Ortega Candel
Centers Technician de Everis.
@jmortegac
www.linkedin.com/in/jmortega1
2. 5www.coiicv.org
Bit@cora Enero 2016
elementos de primer nivel o de orden supe-
rior y se enfatiza la iteración recursiva en
lugar de los bucles con variables que cam-
bian de estado.
Existen otros lenguajes que no son pura-
mente funcionales, pero con los cuales se
pueden experimentar técnicas de progra-
mación funcional como JavaScript o Python.
Ambos son lenguajes interpretados multi-
paradigma, con tipos dinámicos, que per-
miten pasar funciones como parámetro.
Ventajas que aporta la programación
funcional:
• Los programas escritos en un estilo fun-
cional son más fáciles de testear y de-
purar.
• Al utilizar programación funcional las
líneas de código se reducen y nues-
tro programa es mucho más simple de
comprender.
• Por su característica modular, facilita
la computación concurrente y paralela;
permitiéndonos obtener muchas de las
ventajas de los procesadores multihilo.
• El estilo funcional trabaja muy bien con
grande colecciones de datos, permitién-
donos crear algoritmos y programas
más expresivos.
• Ofrece también una serie de ventajas
productivas a la hora del mantenimien-
to del código, entre ellas encontramos
que éste suele ser más sencillo de com-
prender y por lo tanto, puede extender-
se y/o modificarse con mayor facilidad.
• Favorece pequeños bloques de ejecución
• Reusabilidad y extensibilidad
Las ventajas de Groovy es que simplifica
mucho la sintaxis y verbosidad de Java has-
ta lo realmente necesario para expresar lo
que queremos hacer.
Swift, es un lenguaje creado por Apple con el
objetivo de sustituir a Objective-C como len-
guaje principal para el desarrollo de aplicacio-
nes, tanto para iOS como para Mac OS X.
Uno de los lenguajes que mayor empujón
le ha dado a la programación funcional es
Scala. Se puede considerar hoy en día que
es el más potente para programación fun-
cional por varios motivos:
• Trata de combinar lo mejor de la pro-
gramación funcional con lo mejor de la
orientación a objetos.
• Es un lenguaje de programación mul-
ti-paradigma que se ejecuta sobre la
JVM, e incorpora características de pro-
gramación orientada a objetos, funcio-
nal y concurrente. Soporta tanto plata-
formas Java como CLR para .NET.
• Es completamente interoperable con
sus plataformas: por ejemplo, puedes
llamar a código Java desde Scala y vi-
ceversa.
• Ofrece soporte para programación con-
currente a través de la librería Akka
• Los programas en Scala son más cortos
y mantenibles si los comparamos con
sus homólogos en Java. En muchos as-
pectos Scala se parece a otros lengua-
jes como Python aunque incluye una
mayor cantidad de características fun-
cionales de serie, sin recurrir a librerías
de terceros.
Clojure es un lenguaje puro de programa-
ción funcional orientado a la programación
multi-hilo. Proporciona un conjunto de ele-
mentos inmutables como listas, vectores,
conjuntos y mapas donde las funciones son
3. 6 www.coiicv.org
Bit@cora Febrero 2016
Conclusiones
La programación funcional es un paradig-
ma de programación cuyo objetivo es crear
programas más cortos, fáciles de entender
y eficientes sobre hardware multihilo, en
el que se incide especialmente en el uso
de funciones y de estructuras de datos in-
mutables. En principio, podría parecer que
esto no aporta mucho en comparación con
el actual modelo de programación imperati-
va, pero cuando tenemos que trabajar con
procesos y tareas en paralelo que tienen
que interactuar entre sí, esto es una venta-
ja muy notable.
Personalmente creo que es importante
aprender algo de programación funcional
porque de alguna forma cambia la pers-
pectiva que uno tiene de los programas
y sobretodo da una nueva visión de pen-
sar y resolver los problemas. Al fin y al
cabo, la programación funcional es más
una forma de pensamiento y de resolver
problemas que un conjunto particular de
herramientas y lenguajes.