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:

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.

d3bb7c13cd4b40142fab4a7eb0ef7155

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

scala

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.

twitter

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) 
}

Post By Rocio Muñoz (37 Posts)

Ingeniera Informatica. Dicen que todos los niños nacen con un pan debajo del brazo ... Yo creo que llevaba un ordenador. Trabajo como programadora en Cic en entornos Java. Apasionada del mundo web y la innovacion social.

Connect

2 Responses to “Scala, Java y la programacion funcional”