Як закриття в Java вплине на спільноту Java?


11

Це одна з найбільш обговорюваних функцій, запланованих для Java: Закриття. Багато з нас так прагнули до них. Деякі з нас (у тому числі я) трохи нетерплячі і звернулися до мов скриптів, щоб заповнити порожнечу.

Але, як тільки закриття нарешті дійшли до Java: як вони впливатимуть на спільноту Java? Чи буде просування мови, орієнтованої на VM-скрипт, повільно скануватиметься, залишатиметься однаковою чи пришвидшеною? Чи будуть люди стикатися до нового синтаксису закриття, таким чином перетворюючи бази коду Java всебічно у більш функціонально структуровані реалізації? Чи будемо ми бачити лише закриття, посипані на Java протягом усієї? Який вплив буде на підтримку інструментів / IDE? Як щодо продуктивності? І нарешті, що це буде означати для подальшого прийняття Яви як мови в порівнянні з іншими мовами, що користуються популярністю?

Наведіть приклад однієї з останніх запропонованих специфікацій синтаксису Java Closure:

public interface StringOperation {
   String invoke(String s);
}

// ...

(new StringOperation() {
   public invoke(String s) {
       new StringBuilder(s).reverse().toString();    
   }
}).invoke("abcd");    

стане ...

String reversed = { 
    String s => 
    new StringBuilder(s).reverse().toString()
  }.invoke("abcd");

[джерело: http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]


Приклад, який ви публікуєте, - це багато років тому - ви впевнені, що він є представником поточних пропозицій?
Даніель Ервікер

Це може бути не так: сміливо переглядайте мій приклад

3
Останнім часом я більше чи менше переставав користуватися Java. Я все ще сподіваюся на закриття.
Анто

@Daniel - це не поточна пропозиція, тут, здається, є більш актуальна (і дуже інша): baptiste-wicht.com/2010/05/…
Ніколь,

це як вираз C # лямбда?
Луї Ріс

Відповіді:


4

Я думаю, що багато «звичайних» розробників Java пройдуть певний час, щоб обійти цю концепцію, якщо вони ще не знайомі з нею, але поступово це полегшиться у звичайному використанні Java, на нашу користь. Було б чудово, якби його прийняли так само швидко, як і дженерики, коли з'явилася Java 5.

Я думаю, що це не вплине на мови орієнтованого сценарію VM настільки, наскільки це лише одна перевага використання тих, хто їх має.


3

Існує звичайний цикл, який поєднується з будь-яким блискучим новим інструментом:

  • Масове хвилювання, коли шум нових користувачів зловживає цим. Це нормально і здорово, оскільки це допомагає нам зрозуміти обмеження нового інструменту та способи його використання.
  • Більш зарезервовані люди будуть говорити сусідами і вважатимуть ранніх усиновителів дурними
  • Врешті-решт хвилювання зникає, і ранні усиновлювачі домовляються про здорові способи використання нового інструменту
  • Більш зарезервовані люди почнуть заздрити продуктивності людей, що використовують новий інструмент, і почнуть його застосовувати - використовуючи здорові нині моделі.

На все це потрібно кілька років, щоб пройти цикл. Це було правдою для приміток та дженериків, і це буде справедливо і для закриття.

Вплив на мову сценаріїв:

  • Для мов, які підтримують закриття, це допоможе письменникам мови сценаріїв виконувати свою роботу більш ефективно. Оскільки вони вже знають, як використовувати закриття, вони не обов'язково робитимуть шалені речі.
  • Для мов, які не підтримують закриття, це буде значною мірою проігноровано.

1

Ті, кому сподобається багатопотокове програмування, зможуть вбудовувати в Java незмінні структури даних та обробляти їх більш лісоподібно, без необхідності вдаватися до не послідовників через невідповідність мовного опору між Java та Lisp.

Ті, хто не використовує (або не розуміє) нічого з перерахованого вище, зможе робити те саме, що було раніше.


1
Це не має сенсу. Замикання не мають нічого спільного з нарізанням різьбою або зміною.
davidk01

Вони роблять. Правильне закриття вимагає незмінності працювати без вибухів мозку.
пермеакра

Ні, вони ні. Закриття - це фрагмент коду, який знає про середовище, в якому він був створений. Це все.
davidk01

1
@ davidk01 визначення в порядку, але коли закриття має посилання на змінну змінну, її результат змінюється зі зміною змінної. Зазвичай це не те, чого хочеться, але якщо компілятор не заперечує, помилка майже не виявляється.
пермеакра

1
@ davidk01 Ні, я ні. Моя думка полягає в тому, що закриття / лямбдаси добре працюють, якщо вони пов'язані з незмінністю перехоплених змінних. Інакше ти милуєш Тиценч, і шанси тут мають лише віддані шанувальники.
пермеакра

1

Я підозрюю, що люди, знайомі із закриттями, почнуть використовувати їх у коді програми. Вони уникнуть їх у бібліотеках на деякий час, щоб підтримувати сумісність із старими версіями Java.

Програмісти, які не знайомі із закриттями з інших мов, повільно приймуть їх на Java.

Generics були прийняті швидко, коли вони були представлені на Java частково через всі попередження, які з'явилися при модернізації та через їх включення до SDK. Це не буде правдою при закриттях. Складніше знайти докази їх існування буде важче, тому ними користуватимуться лише ті, хто хоче їх використовувати.

Я не думаю, що розвиток інших мов сценаріїв JVM зупиниться. Ці мови, крім закриттів, мають велику силу та багато можливостей. Однак ми можемо бачити менше нових мов JVM, оскільки закриття стало головним поштовхом до створення нових мов JVM.


Ви повинні подивитися на mseifed.blogspot.se/2012/09/… Я думаю, це досить приголомшливо!
ммм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.