Introducción a las expresiones lambda y a las interfaces funcionales en Java

Expresiones lambda

Fernando Paniagua, profesor de la Escuela CICE en el área de Desarrollo de Aplicaciones, nos presenta las interfaces funcionales y las expresiones lambda como herramientas para la creación de código más compacto en el lenguaje Java.

Introducción a las interfaces funcionales

Las expresiones lambda son, en Java, la puerta a la programación funcional. Fueron introducidas en la versión 8 de Java como mecanismo para implementar clases de un único método de manera compacta, aunque probablemente su utilidad sea más fácil de comprender a través de la implementación de interfaces funcionales.

Una interface funcional se diferencia de una interface convencional en que únicamente tiene un método abstracto.

Supongamos el siguiente ejemplo: estamos generando una funcionalidad en nuestro sistema software que va a ser capaz de calcular algo tan difícil (y tan poco creíble) como la suerte de una persona a partir de su nombre pila. Como es evidente, no sabemos muy bien cómo se hace dicho cálculo, por lo que definimos una interface y dejamos para el futuro la programación del algoritmo que desarrolle el cálculo.

El siguiente código corresponde a dicha interface funcional:

Expresiones lambda e interfaces funcionales

El análisis de este código es el siguiente:

  • La anotación @FunctionalInteface indica al editor y al compilador que estamos definiendo una interface funcional. Si no lo hacemos bien el editor o el compilador nos avisará y podremos corregir el error.
  • El método calcularSuerte es el único método abstracto de la interface.
  • Los métodos static y default están implementados por lo que ya no son métodos abstractos.

Un uso tradicional de esta interface consistiría en la programación de una clase que implementase la misma y programase sus métodos abstractos:

Expresiones lambda e interfaces funcionales

Para hacer uso de esta clase, necesitaremos instanciarla e invocar al método abstracto, tal y como se muestra a continuación:

Expresiones lambda e interfaces funcionales

Clases anónimas

Otra alternativa distinta consiste en crear una clase anónima que implemente la interface:

Expresiones lambda e interfaces funcionales

El resultado será el mismo, salvo por el hecho de que no hemos creado una clase que implemente el interface, lo que hace que el código sea más compacto.

En la siguiente alternativa tampoco se crea la clase CalculadoraFortunaSimple sino una clase anónima que implementa la interface y se invoca directamente al método de cálculo:

Expresiones lambda e interfaces funcionales

En este caso, el código es de un solo uso, ya que la llamada al método está incrustada en la propia implementación anónima y no podría llamarse desde otro lugar.

Cada solución, como siempre, tiene ventajas e inconvenientes y tendremos que tomar la alternativa que más convenga según el caso.

Aplicación de las expresiones lambda

Dado que la interface que estamos implementando sólo dispone de un método (es una interface funcional), encaja en el uso de las expresiones lambda. Una posible implementación quedaría así:

Expresiones lambda e interfaces funcionales

En esta primera versión de implementación de la interface mediante expresión lambda, se observa que se asigna a un objeto de tipo ICalculadoraFortuna una implementación de un método del que no se indica el nombre (esa es la razón por la que se obliga a la interface ser funcional). Los caracteres -> indican que a continuación viene la implementación del método abstracto. En este caso se indica entre llaves ya que contiene más de una línea. El resto es simplemente hacer uso del objeto icf para hacer el cálculo.

Otra posible implementación sería la siguiente:

Expresiones lambda e interfaces funcionales

La única diferencia con la solución anterior consiste en que no se indican los tipos de los parámetros del método abstracto (en este caso, sólo hay un parámetro: nombre). Tiene sentido: si sólo hay un método abstracto no puede haber confusión a la hora de saber a qué método se está invocando, por lo que necesariamente los tipos deben ser los del único método existente.

Una forma aún más compacta de expresiones lambda

Expresiones lambda e interfaces funcionales

Si sólo tenemos una línea de código en la implementación del método abstracto, también nos podemos ahorrar las llaves y, en este caso, el return. El compilador interpretará que la parte derecha de la expresión es el retorno de la misma.

Para terminar, utilizaremos las expresiones lambda para hacer llamadas a métodos que necesiten una implementación de determinada interface para realizar el proceso.

Expresiones lambda e interfaces funcionales

En este último código, estamos invocando al método realizarTarea de la clase App que recibe como parámetros de entrada un String y una implementación de la interface ICalculadoraFortuna. En cada llamada se proporciona una expresión lambda con la implementación de alguna de las alternativas a dicha interface, de una forma muy compacta y sin la necesidad de crear clases de un único uso.

Gracias a las expresiones lambda y las interfaces funcionales hemos conseguido implementar una interface en unas pocas líneas de código, compactando el algoritmo de forma notable.

No se encontró el banner

25/05/2020 | | Artículos Diseño, Desarrollo y Apps Blogs Destacadas Diseño, Desarrollo y Apps

Lucía Torres Álvarez

Lucía Torres Álvarez

Escribe tu comentario

Si quieres personalizar tu avatar, click aquí.
Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *
Recuerda que los comentarios deben ser revisados por un administrador.

Mándanos tu consulta

Puedes llamarnos:

Centro Maldonado

91 401 07 02

Centro Povedilla

91 435 58 43

O si lo prefieres, déjanos tus datos y nosotros te llamamos.

*Selecciona una titulación

Te llamamos sin compromiso

Puedes llamarnos al 91 401 07 02 (Centro Maldonado) o al 91 435 58 43 (Centro Povedilla).

Si lo prefieres, déjanos tus datos y nosotros te llamamos.

Introducción a las expresiones lambda y a las interfaces funcionales en Java
Buzón de quejas




Acepto las condiciones legales

SOLICITAR UNA CLASE DE PRUEBA GRATUITA
Introducción a las expresiones lambda y a las interfaces funcionales en Java

Horario atención al cliente

  • Lunes a viernes

    • De 9 a 14 horas
    • De 16 a 21 horas
  • Sábados

    • De 9 a 14 horas

Teléfono de contacto: 91 435 58 43

Solicita información sobre
Envíanos tu opinión sobre CICE
Nosotros te asesoramos

¿No te decides?

Nosotros te ayudamos. Utiliza nuestro buscador avanzado para encontrar el curso que quieres.