До колкото знам един смислен език, който поддържа "closures" е C#.
Защо в кавички?
Защото честно казано не съм се задълбавал по темата и малко ми убягва точния смисъл на "closures".
Кое точно е "closure"? Дефинирането на метод в метод (познато ми от времето, когато още пишех на Pascal), или извратеното присвояване на метод към променлива (указател към функция в езика C)? Или е нещо съвсем друго?
JOKe казва, че това е безсмислено, та нали си имаме анонимни класове! Тогава мога и аз да попитам - за какво са ни анонимни класове - та нали си имаме работещо ООП без анонимни класове в Java 1.0?
Идеята ми е, че ако така се връщаме назад и се питаме кое е излишно и може да се замени с друго, което вече съществува, тогава рано или късно ще се върнем до писането на асемблер-like езици.
Няма нищо лошо в "closures", нека ги има! Който иска - нека ги използва, който не иска - нека не ги използва. Въпрос на избор.
В Java 7 мен лично повече ме интересува какви облекчения ще се въведат в областта на боравенето с XML и кога най-после ще видим application server като част от Java SE (вече имаме DB engine и олекотен HTTP server). Движението е в посока надолу, т.е. неща, които са били част от Java EE "слизат" към Java SE. Според моята логика скоро следва да видим application server като неизменна част от Java SE.
Сега ми хрумна, че идеята да се въведат "closures" в Java се е появила на бял свят не заради друго, а заради конкуренцията със C#. Въпреки че основно пиша на Java, все още мисля, че C# е доста по-кадърно скалъпен език, който отстъпва на Java само в едно отношение - enum структурите.
Много се отклоних от идеята на темата. Като обобщение мога да кажа, че повече изразни средства в един език за програмиране дават по-голяма свобода на избор на и без това изстрадалите програмисти, които се чудят как да напишат това и това, така че просто "да тръгне".
Ако става въпрос за бъдеща поддръжка и лесно четене на код - въвеждането на "closures" е пълно безумие (ако някой си е играл скоро да дебъгва указатели към функции знае за какво говоря).
Ще си позволя да дам следния леко завоалиран съвет към всички Java програмисти:
- "Страдате от затруднено четене на код? В последно време дебъгвате по-трудно от преди? Кодът Ви е пълен със странни вуду символи от рода на:
Map<Integer, String> (Set<String>, List<Short>) closureNew = closureOld;
Решението е само едно - не използвайте closures, освен при крайна необходимост!"