Scala, Java y la programacion funcional
El mundo del desarrollo es muy amplio y tenemos diversos caminos para resolver un mismo problema
- programacion imperativa
- programación recursiva
- programación orientada a objetos
- programación funcional
- programación reactiva
Cuantos más caminos conozcamos, mejor será la solución que escojamos para resolver el problema.
Últimamente muchos lenguajes están aplicando el paradigma funcional (Javascript, Java, Scala, Clojure, Haskell, F# …).
Por ejemplo:
Javascript
Con el uso de arrow functions
var multiply = (x, y) => { return x * y };
Java 8
Con el uso de streams
Arrays.asList("a1", "a2", "a3") .stream() .findFirst() .ifPresent(System.out::println);
Vamos a ver en que consiste …
Qué es la programación funcional
Tiene su origen en el año 1930, con el desarrollo del calculo lambda para la definición de funciones y recursividad
Caracteristicas
La programación funcional está formada por funciones matemáticas.
La función es la unidad básica. Variables, datos, exprexiones … todo son funciones.
Las variables no tienen estado, son inmutables, es decir, no cambian sus valores a lo largo de la ejecución del programa. Se asigna su valor una vez, y no vuelven a cambiar. Lo he llamado variable, pero realmente no tiene sentido llamarlas asi. Son realmente simbolos, accesos a exprexiones ..
No existen bucles o estructuras (for, while ..) ya que se trabaja con recursividad.
Podemos encontrarnos 2 tipos de lenguajes funcionales
- lenguajes funcionales puros (Haskell)
- lenguajes funcionales híbridos (Scala) : Admiten conceptos de la programación imperativa
Ventajas
Como las «variables» son inmutables, no existen efectos colaterales en el código.
La depuración es más sencilla. El trabajo de pruebas se reduce a probar unidades pequeñas de código (funciones) que no son alterables desde fuera.
Facilita la concurrencia ya que los datos son inmutables. No habrá bloqueos.
Enlaces
Si os pica la curiosidad sobre este nuevo paradigma de programación, os dejo varios links donde profundizar en el tema:
- Historia, conceptos básicos y ejemplos de la programación funcional
- Programacion Funcional : Charla realizada en CodersCantabria por @jonsurrell
- Programacion Funcional con Haskell : Libro publicado en OpenLibra sobre la programacion funcional usando Haskell
- Programación Funcional en Java: Ejemplo de programación funcional implementado en Java
Qué es Scala
Un lenguaje de programación multiparadigma es aquel que permite al programador elegir diferentes “estilos” de desarrollo dependiendo del tipo de problema: programación lógica, funcional, orientada a objetos…
Pues esto es Scala, un lenguaje multiparadigma que mezcla las propiedades de la programación funcional y de la programación orientada a objetos.
Se ejecuta sobre una máquina virtual de Java. Esto nos va a permitir mezclar código Java en Scala y código Scala en Java. Pero … ¿cómo es esto posible? ¿cómo podemos trabajar con este popurri de lenguajes? ¿cómo se aclara la máquina virtual de qué es lo que está recibiendo?
Muy fácil, a la máquina virtual no le importa en qué lenguaje estemos desarrollando. Le importa el «bytecode» generado por el compilador. Al igual que existe un compilador en java para generar los ficheros .class, tambien tenemos un compilador en scala. Nuestra máquina virtual recibirá el mismo tipo de datos, estemos trabajando en Java, en Scala o en ambos mezclados
Casos reales del uso de Scala
La primera pregunta que os estareis haciendo es, el grado de estabilidad del lenguaje. Os diré que lo utilizan Twitter y Linkedin en sus arquitecturas.
Ejemplo con Scala
Vamos a ver un ejemplo básico para que os quedéis con ganas de más.
ForEach
lista foreach{x =>print(x)};
Filtros
lista.filter{x => x>5};
Y un ejemplo un poco más elaborado que suma los elementos de una lista.
def sum(ints: List[Int]): Int = ints match { case Nil => 0 case x :: tail => x + sum(tail) }
2 Responses to “Scala, Java y la programacion funcional”