Foto av Sofia Jonsson

Closures - snart i en JDK nära dig?

// Sofia Jonsson

Som vi redan har sett i språk som Ruby, Groovy eller varför inte Smalltalk så kan så kallade Closures betydligt förenkla syntaxen på vissa typer av uttryck. Innehållet i Java SE 7 börjar så sakteliga att ta form och Closures är ett av tilläggen som eventuellt kan komma att ingå i språket.

Ett förslag på hur Closures skulle kunna komma att se ut i Java håller för närvarande på att arbetas fram. Förslaget finns att läsa här http://blogs.sun.com/roller/resources/ahe/closures.pdf.

Enligt förslaget skulle en Closure i Java bli en anonym, inre funktion som kan accessa alla variabler från den yttre metoden. Redan nu kan man åstakomma liknande resultat i Java genom att använda anonyma klasser med den skillnaden att en anonym klass bara kan accesssa variabler som är deklarerade som “final”. En annan skillnad är att en Closure skall kunna returnera från den yttre metoden direkt, något som en anonym klass inte kan. Dessutom skulle syntaxen bli mer kompakt med Closures jämfört med anonyma klasser och det är väl kanske här som den stora vinsten ligger.

Förslaget innebär att språket skulle få stöd för speciella funktionstyper som man kan tilldela en lokalt deklarerad funktion till:

public static void main(String[] args) {
  // Här deklareras den inre funktionen med namnet plus2
  int plus2(int x) { return x+2; }
  // Här definieras funktionstyps-variabeln plus2b som tilldelas funktionen plus2
  int(int) plus2b = plus2;
  // Här används plus2b
  System.out.println(plus2b(2));
}

Syntaxen går att göra ännu mer kompakt genom att man tar bort behovet av att först definiera funktionen. Funktionen blir då helt anonym, en så kallad Closure:

int(int) plus2b = (int x) { return x+2; };

Just nu pågår en livlig debatt om Closures för- och nackdelar och om den exakta syntaxen. Om Closures verkligen blir en del av JDK 7 återstår alltså att se.

Läs mer om Closures i Java:

http://gafter.blogspot.com/2006/08/use-cases-for-closures.html

http://www.oreillynet.com/onjava/blog/2006/08/will_we_have_closures_in_java.html

Kommentarer