Home > Tecnologías > Casi decidida la sintaxis de las closures para Java 8

Casi decidida la sintaxis de las closures para Java 8

Después de mucho discutir sobre si el lenguaje java debería o no tener closures, al final se decidió que si. Luego tocaba la, no menos complicada, labor de decidir la sintaxis. Algunas de las propuestas fueron:

#{Foo foo -> foo.bar()}

int(int a, int b) { return a – b; }

….

Pero al final parece que ha ganado la sintaxis utilizada en C# y scala:

lambda = ArgList Arrow Body
   ArgList = Identifier
             | "(" Identifier [ "," Identifier ]* ")"
             | "(" Type Identifier [ "," Type Identifier ]* ")"
   Body = Expression
             | "{" [ Statement ";" ]+ "}"

Algunos ejemplos serían:

  1. x => x + 1
  2. (x) => x + 1
  3. (int x) => x + 1
  4. (int x, int y) => x + y
  5. (x, y) => x + y
  6. (x, y) => { System.out.printf(“%d + %d = %d%n”, x, y, x+y); }
  7. () => { System.out.println(“I am a Runnable”); }

A mi, eso de que puedas definir la closure sin indicar de que clase son las variables, en un lenguaje fuertemente tipado como es Java, no lo veo claro (ejemplos 2, 5 y 6)

Un compañero de JavaHispano nos muestra un ejemplo más completo de como van a funcionar estar closures:

// sin closures
List data = new Vector();
Collections.sort( data, 
                  new Comparator()
                      { public int compare(Object a, Object b)
                               { return ((String) a).length()- ((String) b).length();  }
                      }
                );

// con closures
List data = new Vector();
Collections.sort(data, (a, b) => { ((String) a).length()- ((String) b).length(); } );

Para poder empezar a usar las closures vamos a tener que esperar hasta octubre del 2012, si Oracle no hace ninguna pirula, ya que es para cuando tienen pensado sacar Java 8.

Dejo un par de enlaces sobre la sintaxis de la closures en JavaHispano y la fuente original correos de openJDK.

Advertisements
Categories: Tecnologías Tags: , , , ,
  1. smolina
    09/20/2011 at 17:55

    Es interesante, aunque lo de las lambda apesta a copy paste de Python (esta vez). Eso sí, estoy de acuerdo en que el copy paste deberían forzar a especificar el tipo/clase de las variables.

    Es que asocio no tipado con Perl y se me ponen los pelos de punta.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: