Introducción a las expresiones lambda y a las interfaces funcionales ...

Fernando Paniagua, profesor de la Escuela CICE en el área de Desarrollo de Aplicaciones, nos presenta las interfaces fu...

Click Here
Click Here
Click Here
Click Here
Click Here
Click Here
Click Here
Click Here
Click Here

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.



    ¿Más información?













    POSTS RELACIONADOS
    COMENTARIOS 0

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Suscríbete a nuestra Newsletter

      Te avisaremos de los nuevos Másteres, Webinars y Eventos.



      Resuelve tus dudas

      ¿Tienes alguna duda sobre nuestras carreras, metodología o proceso de matriculación?

      Contacta con nosotros

      Único Centro de Formación Oficial de más de 20 Multinacionales en España, es ya una Comunidad con más de 60.000 alumnos procedentes de más de 30 países distintos. Con todas las Homologaciones de las Compañías Líderes a nivel mundial y con un plantel de profesionales docentes certificados procedentes de las más prestigiosas Compañías Nacionales e Internacionales.

      Síguenos

      © CICE 2021 – Todos los derechos reservados | Contacto | Aviso Legal | Política de Privacidad | Política de Cookies