[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Closures en Java




Hola,

Hace poco escribí un mail en esta lista sobre programación funcional en
Java [1] en el que lamentaba:

"Desgraciadamente, Java es un lenguaje imperativo en el que las
funciones no se consideran objetos de primera clase. (...) Hasta ahora
Java no soporta directamente los closures."

Pues bien, parece que se está planteando el incorporar esta
característica al lenguaje. Gilad Bracha, Neal Gafter, James Gosling y
Peter von der Ahé han escrito una propuesta [2] para la inclusión de
tipos función y de closures en Java.

Según dice el informe, que no he tenido tiempo de leer en su totalidad:

"Function types provide a natural way to express some kinds of
abstraction that are currently quite awkward to express in Java.

(..)

We propose to add function types and closures to Java. We anticipate
that the additional expressiveness of the language will simplify the use
of existing APIs and enable new kinds of APIs that are currently too
awkward to express using the best current idiom: interfaces and
anonymous classes."

Sin duda, esta será una decisión polémica. Hay quien argumenta que Java
se está empezando a complicar demasiado y que como medida defensiva
frente a otros lenguajes emergentes (diría que especialmente Ruby), se
está pretendiendo incorporar toda característica alabada por los
desarrolladores en estos lenguajes, sin pensar si se violan los
principios de diseño originales del lenguaje.

En un mail de 2003 [3] Guy Steele argumenta porqué no se soportaron
inicialmente los closures por contravenir uno de los principios de
diseño del lenguaje:

"One of the early design principles of Java was that heap allocation
occurrs if and only if a construct involving the "new" keyword is
executed. Adding full-blown closures violated this design principle."

Aunque también reconoce que el autoboxing de Java 1.5 ya viola este
principio y que esto podría justificar replantearse el tema de los closures:

"Other features for Java release 1.5 will perform certain kinds
of autoboxing, which also violates the design principle.  This fact
will make it easier to argue for restoring full-blown support
for closures in the future."

Un saludo,
Rafael Luque

[1] http://www.orange-soft.com/mindfood/archive/msg00267.html
[2] http://blogs.sun.com/roller/resources/ahe/closures.pdf
[3] http://article.gmane.org/gmane.comp.lang.lightweight/2274

-- 
Rafael Luque Leiva

Orange Soft - http://www.orange-soft.com
Creando software para las personas

Urbanización Las Castañeras
Arroyo de los Combos, 26 bis
Arroyomolinos, E28939 Madrid
Tel: +34 692 613 639
Fax: +34 916 091 075

GnuPG Key ID: 0x4B9238A2