Jest to jedna z najczęściej omawianych funkcji planowanych w Javie: Zamknięcia. Wielu z nas tęskni za nimi. Niektórzy z nas (w tym ja) stali się trochę niecierpliwi i wybrali języki skryptowe, aby wypełnić pustkę.
Ale po zamknięciu wreszcie oprogramowania Java: jak wpłyną na społeczność Java? Czy zaawansowanie języków skryptowych ukierunkowanych na maszyny wirtualne spowolni indeksowanie, pozostanie takie samo lub przyspieszy? Czy ludzie będą gromadzić się w nowej składni zamykania, zmieniając w ten sposób podstawy kodu Java w bardziej funkcjonalne struktury? Czy przez cały czas będziemy widzieć tylko zamknięcia zamknięte w Javie? Jaki będzie wpływ na obsługę narzędzia / IDE? Co powiesz na wydajność? I w końcu, co to będzie oznaczać dalsze przyjmowanie Javy jako języka w porównaniu z innymi językami, które zyskują na popularności?
Aby podać przykład jednej z najnowszych proponowanych specyfikacji składni Java Closure:
public interface StringOperation {
String invoke(String s);
}
// ...
(new StringOperation() {
public invoke(String s) {
new StringBuilder(s).reverse().toString();
}
}).invoke("abcd");
stanie się ...
String reversed = {
String s =>
new StringBuilder(s).reverse().toString()
}.invoke("abcd");
[źródło: http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]
Odpowiedzi:
Myślę, że wielu „zwykłym” programistom Java zajmie trochę czasu, aby zapoznać się z tą koncepcją, jeśli jeszcze jej nie znają, ale stopniowo zacznie ona normalnie korzystać z Java, z całą naszą korzyścią. Byłoby wspaniale, gdyby został przyjęty tak szybko, jak generyczne, gdy pojawiła się Java 5.
Wyobrażam sobie, że nie wpłynie to tak bardzo na języki skryptowe ukierunkowane na VM, ponieważ jest to tylko jedna zaleta korzystania z tych, które go mają.
źródło
Jest zwykły cykl, który przebiega z każdym nowym błyszczącym narzędziem:
To wszystko trwa kilka lat. Było tak zarówno w przypadku adnotacji, jak i rodzajów, i dotyczy to również zamknięć.
Wpływ na ludzi skryptowych:
źródło
Ci, którzy lubią programowanie wielowątkowe, będą mogli osadzać niezmienne struktury danych w Javie i obsługiwać je w bardziej podobny do seplenienie sposób, bez potrzeby uciekania się do niesekwencjonowania z powodu niedopasowania impedancji językowej między Javą a Lispem.
Ci, którzy nie używają (lub nie rozumieją) żadnego z powyższych, będą mogli robić rzeczy tak, jak wcześniej.
źródło
Podejrzewam, że ludzie znający zamknięcia zaczną ich używać w kodzie aplikacji. Przez pewien czas będą ich unikać w bibliotekach, aby zachować zgodność wsteczną ze starszymi wersjami Javy.
Programiści, którzy nie znają zamknięć z innych języków, będą powoli przyjmować je w Javie.
Generyczne zostały szybko przyjęte, gdy zostały częściowo wprowadzone w Javie, ze względu na wszystkie ostrzeżenia, które pojawiły się podczas aktualizacji i ze względu na ich włączenie do zestawu SDK. Nie będzie to prawdą w przypadku zamknięć. Trudniej będzie znaleźć dowody na ich istnienie, więc tylko ci, którzy chcą ich użyć, będą z nich korzystać.
Nie sądzę, że rozwój innych języków skryptowych JVM się zatrzyma. Te języki mają rozpęd i wiele funkcji oprócz zamknięć. Możemy jednak zobaczyć mniej nowych języków JVM, ponieważ zamknięcia były głównym impulsem do tworzenia nowych języków JVM.
źródło