Ahora les traigo un adelanto de lo que nos espera en Java 8, se trata del proyecto Lambda, el cuál nos permitirá el uso de funciones anónimas y clausuras, lo cual forma parte del paradigma de programación funcional, por el momento estoy adelantándome a lo que viene y realizando ejercicios en la versión beta, si ustedes quieren hacer experimentar también aquí les dejo el editor netbeans de prueba para expresiones lambda y el java 8 beta.
Veamos de que trata las funciones anónimas, para eso usaremos un ejemplo de como se haría de la manera tradicional usando inyección de dependencias. Haremos una calculadora binaria, que sólo realiza la suma o resta de 2 números, para eso crearemos una interfaz de nombre CalculadoraBinariaIF, y las 2 operaciones Adicion y Sustraccion, las cuales implementaran dicha interfaz, y por supuesta la clase CalculadoraBinaria, en donde se aplicará la inyección de dependencia.
package calculadora; /** * * @author TEFI */ public interface CalculadoraBinariaIF { double calcular(double a, double b); }
package calculadora; /** * * @author TEFI */ public class Adicion implements CalculadoraBinariaIF{ @Override public double calcular(double a, double b) { return a + b; } }
package calculadora; /** * * @author TEFI */ public class Sustraccion implements CalculadoraBinariaIF{ @Override public double calcular(double a, double b) { return a - b; } }
package calculadora; /** * * @author TEFI */ public class CalculadoraBinaria { public double calcular(double a, double b, CalculadoraBinariaIF calculadora) { return calculadora.calcular(a, b); } }
Aquí estamos inyectando a la clase CalculadoraBinaria 2 objetos uno que se llama adicion y otro que se llama sustracción, los cuales son encargados de realizar la operación asignada a esa clase.
package Claseprincipal; import calculadora.*; /** * * @author TEFI */ public class ClasePrincipal { public static void main(String[] args) { CalculadoraBinaria calculadora = new CalculadoraBinaria(); CalculadoraBinariaIF adicion = new Adicion(); CalculadoraBinariaIF sustraccion = new Sustraccion(); System.out.println("40 + 2 = " + calculadora.calcular(40, 2, adicion)); System.out.println("20 - 3 = " + calculadora.calcular(20, 3, sustraccion)); } }
Aquí se usa las funciones anónimas en la línea 14 y 15, nótese la diferencia entre la forma tradicional, es que se debe crear una clase para cada operación, mientras que las funciones anónimas no, sólo defines la función anónima, (a, b) representan los parámetros que recibe la función y -> indica el cuerpo de la función, es decir lo que realizará la función, y lo que regresará es a + b, el return se omite dado que sólo es una expresión, en caso de que se requiera hacer más cálculos se usan las llaves y se codifica el cuerpo de la función tal cual como se haría normalmente.
package Claseprincipal; import calculadora.*; /** * * @author TEFI */ public class ClasePrincipal { public static void main(String[] args) { CalculadoraBinaria calculadora = new CalculadoraBinaria(); CalculadoraBinariaIF adicionL = (a, b) -> a + b; CalculadoraBinariaIF sustraccionL = (a, b) -> a - b; System.out.println("40 + 2 = " + calculadora.calcular(40, 2, adicionL)); System.out.println("20 - 3 = " + calculadora.calcular(20, 3, sustraccionL)); } }