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
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
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.

Programación funcional, una nueva forma de resolver problemas.

  • 1.
    4 www.coiicv.org Bit@cora Febrero2016 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 elementosde 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 Febrero2016 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.