martes, 15 de junio de 2010

1era versión de closures publicada por Oracle




Oracle publicó en el transcurso de esta semana una primera versión de la implementación de closures que formarán parte de Java 7. A continuación una pequeña muestra:


int i1 = #()(3).(); //i1 = 3Integer i2 = #()(3).(); //i2 = 3int i3 = #(int x)( x + 1 ).(3); //i3 = 4int i4 = #(Number x)(x.intValue()).(new Float(3.0f)); //i4 = 3


La # se emplea para definir las closures.
El primer paréntesis que va después de la # define los parámetros que toma la closures (ninguno en los dos primeros ejemplos, un int y un Number en el tercer y cuarto ejemplo). Después de ese primer paréntesis, obligatorio aunque no haya parámetros, también entre paréntesis va el código de la closure. En los ejemplos, el ".()" final ejecuta la closures.


Además existe una segunda sintaxis más orientada al estilo "Java" donde el cuerpo de la closures va entre {} y que requiere el uso de la sentencia return:


int i1 = #(){ return 3; }.(); //i1 = 3Integer i2 = #(){ return 3; }.(); //i2 = 3int i3 = #(int x){ return x + 1; }.(3); //i3 = 4int i4 = #(Number x){ return x.intValue(); }.(new Float(3.0f));


Fuente: JH