Java Lambdas

Java Lambdas

Hola a todos y bienvenidos a un nuevo artículo del blog. Hoy vamos a hablar de Java Lambdas, que son una novedad (bueno en Java 8, ejem) para abreviar nuestro código.

 

Java Lambdas

Esta letra del alfabeto griego representa “Lambda”. Y de paso, cierto videojuego…

 

Índice de contenidos

  1. Clases anónimas
  2. Lambdas
  3. ¿Cuándo usar cada uno?

 

Clases anónimas

 

¿No iba de Lambdas esto? Pues sí… Precisamente una expresión lambda es «casi» la abreviatura de una clase anónima. Seguramente te suena este código

 

Java Lambdas

 

El fragmento marcado en rojo representa una clase anónima. Como tal, necesita que implementemos la interfaz “ActionListener”, con todo el código que eso implica. Abrir y cerrar la clase con las llaves, definir la función con sus parámetros, definir el tipo de dato de cada parámetro (en este caso solo 1, ActionEvent)

Vamos, que para un simple mensaje “has hecho click” necesitamos 6 o 7 líneas de código, con varias llaves entre medio y el correspondiente lío. Imagínate si hay 5 botones, el código se multiplica.

 

Por cierto, el editor utilizado es Eclipse. Puedes descargarlo aquí.

 

Lambdas

¿Cómo «actualizamos» una clase anónima para que sea un Lambda? Así:

 

Java Lambdas

 

Si comparamos este código con la clase anónima anterior, ha desaparecido casi todo. Sólo queda esto:

 

Java Lambdas

 

Así que éste fragmento:

(e)

reemplaza a 

 

new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

 

¿No está mal, verdad? Aquí Java “deduce” todo lo que falta, es decir el tipo de clase (ActionListener), el nombre de la función (actionPerformed), el tipo del parámetro que recibe (ActionEvent) y se queda sólo con el nombre del parámetro (en este caso, e)

 

Y lo puede deducir, porque sabe que addActionListener NECESITA RECIBIR un ActionListener.

 

Como ActionListener sólo define una función,  también sabe que queremos implementar actionPerformed. Y sabiendo eso, también sabe que el parámetro que pasemos a actionPerformed es de tipo ActionEvent.

 

Es decir que toda esa información “repetida” que estamos pasando al crear una clase anónima, desaparece al escribir un lambda.

 

meme

cortesía de makeameme.org

 

¿Cuándo usar cada uno?

 

De entrada es preferible usar Lambdas. Ya sabes: “Lo bueno si breve, 2 veces bueno”

 

En cambio, si debes implementar 2 o más funciones abstractas, no podrás usarlos.

 

¿Porqué no puedo usar Java Lambdas para implementar varias funciones?

 

Porque al no especificar en el lambda el nombre de la función que usas, Java no sabría a cuál te refieres. Por eso están limitados a interfaces con 1 sola función.

meme

Expresión Lambda cuando debe implementar 2 funciones

 

En este caso vienen al rescate las clases anónimas, que no tienen esta limitación. Puedes implementar tantas funciones como quieras, e incluso usar clases abstractas en lugar de Interfaces.

 

Como ves el contenido es un poco espeso, pero en siguientes artículos profundizaremos en el tema y veremos otras aplicaciones interesantes de las Java Lambdas.

 

 

 

Hasta el próximo artículo 😉

Escribe un comentario