Bagaimana penutupan di Jawa berdampak pada Komunitas Java?

11

Ini adalah salah satu fitur yang paling banyak dibicarakan yang direncanakan untuk Java: Penutupan. Banyak dari kita telah merindukan mereka. Beberapa dari kita (termasuk saya) telah menjadi sedikit tidak sabar dan beralih ke bahasa scripting untuk mengisi kekosongan.

Tetapi, begitu penutupan akhirnya tiba di Jawa: bagaimana pengaruhnya terhadap Komunitas Jawa? Apakah kemajuan bahasa scripting VM-ditargetkan lambat untuk merangkak, tetap sama, atau acclerate? Akankah orang berbondong-bondong ke sintaks penutupan baru, sehingga mengubah basis kode Java all-around menjadi implementasi yang lebih terstruktur secara fungsional? Apakah kita hanya akan melihat penutupan di seluruh Jawa? Apa efeknya pada dukungan alat / IDE? Bagaimana dengan kinerja? Dan akhirnya, apa artinya bagi adopsi lanjutan Java, sebagai bahasa, dibandingkan dengan bahasa lain yang semakin populer?

Untuk memberikan contoh salah satu spesifikasi sintaksis Java Closure yang diusulkan terbaru:

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

// ...

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

akan menjadi ...

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

[sumber: http://tronicek.blogspot.com/2007/12/closures-closure-is-form-of-anonymous_28.html]

Ryan Delucchi
sumber
Contoh yang Anda posting berasal dari bertahun-tahun yang lalu - apakah Anda yakin itu mewakili proposal saat ini?
Daniel Earwicker
Mungkin tidak: jangan ragu untuk merevisi contoh saya
3
Saya kurang lebih telah menggunakan Java belakangan ini. Saya masih menunggu penutupan.
Anto
@Daniel - ini bukan proposal saat ini, sepertinya ada yang lebih terkini (dan sangat berbeda) di sini: baptiste-wicht.com/2010/05/…
Nicole
apakah itu seperti ekspresi C # lambda?
Louis Rhys

Jawaban:

4

Saya pikir ini akan memakan waktu bagi banyak pengembang Java 'biasa' untuk memahami konsep ini jika mereka belum terbiasa dengannya, tetapi lambat laun itu akan memudahkan penggunaan Java biasa, untuk semua manfaat kita. Akan lebih bagus jika dipeluk secepat generik ketika Java 5 tiba.

Saya membayangkan itu tidak akan mempengaruhi bahasa scripting yang ditargetkan VM sebanyak itu hanya satu keuntungan dari menggunakan yang memilikinya.

Alb
sumber
3

Ada siklus yang biasa terjadi dengan alat baru yang mengkilap:

  • Kegembiraan massal, dengan kesibukan pengguna baru menyalahgunakannya. Ini normal dan sehat, karena membantu kita memahami keterbatasan alat baru dan bagaimana alat itu dapat digunakan.
  • Lebih banyak orang yang pendiam akan meringkuk dan menganggap pengadopsi awal sebagai orang bodoh
  • Akhirnya, kegembiraan hilang dan pengadopsi awal menetap di cara sehat untuk menggunakan alat baru
  • Semakin banyak orang yang dilindungi akan mulai iri dengan produktivitas orang-orang yang menggunakan alat baru, dan mulai mengadopsinya - menggunakan pola yang sekarang sehat.

Ini semua membutuhkan beberapa tahun untuk siklus. Itu berlaku untuk anotasi dan obat generik, dan itu juga berlaku untuk penutupan.

Dampak pada orang bahasa scripting:

  • Untuk bahasa yang mendukung penutupan, ini akan membantu penulis bahasa scripting melakukan pekerjaan mereka dengan lebih efisien. Karena mereka sudah tahu cara menggunakan penutupan, mereka tidak perlu melakukan hal-hal gila.
  • Untuk bahasa yang tidak mendukung penutupan, ini akan diabaikan.
Berin Loritsch
sumber
1

Mereka yang menyukai pemrograman multi-threaded akan dapat menanamkan struktur data yang tidak dapat diubah di Jawa dan menanganinya dengan cara yang lebih mirip-lisp tanpa perlu menggunakan non-sequiters karena ketidakcocokan impedansi bahasa antara Jawa dan Lisp.

Mereka yang tidak menggunakan (atau mengerti) salah satu di atas akan dapat melakukan hal-hal seperti yang mereka lakukan sebelumnya.

Edwin Buck
sumber
1
Ini tidak masuk akal. Penutupan tidak ada hubungannya dengan threading atau mutabilitas.
davidk01
Mereka melakukannya. Penutupan yang tepat membutuhkan kekekalan untuk bekerja tanpa ledakan otak.
permeakra
Tidak, mereka tidak. Penutupan adalah bagian dari kode yang tahu tentang lingkungan tempat ia dibuat. Itu saja.
davidk01
1
@ davidk01 definisi itu OK, tetapi ketika penutupan memiliki tautan ke variabel yang dapat berubah, hasilnya berubah dengan variabel berubah. Biasanya, ini bukan yang diinginkan, tetapi jika kompiler tidak keberatan, kesalahannya hampir tidak terdeteksi.
permeakra
1
@ davidk01 Tidak, saya tidak. Maksud saya adalah bahwa closures / lambdas bekerja dengan baik jika mereka terikat dengan variabel variabel yang dapat diubah. Kalau tidak, Anda berada dalam belas kasihan Tzeentch, dan hanya penyembah yang berdedikasi yang memiliki peluang di sini.
permeakra
1

Saya menduga bahwa orang yang akrab dengan penutupan akan mulai menggunakannya dalam kode aplikasi. Mereka akan menghindarinya di perpustakaan untuk sementara waktu untuk menjaga kompatibilitas dengan versi Java yang lebih lama.

Programmer yang tidak terbiasa dengan penutupan dari bahasa lain akan lambat untuk mengadopsi mereka di Jawa.

Generik diadopsi dengan cepat ketika mereka diperkenalkan ke Jawa sebagian karena semua peringatan yang muncul ketika Anda memutakhirkan dan karena penggabungan mereka ke dalam SDK. Ini tidak akan benar dengan penutupan. Akan lebih sulit untuk menemukan bukti keberadaan mereka, jadi hanya mereka yang ingin menggunakannya yang akan menggunakannya.

Saya tidak berpikir bahwa pengembangan bahasa scripting JVM lainnya akan berhenti. Bahasa-bahasa tersebut memiliki momentum dan banyak fitur selain penutupan. Namun kita mungkin melihat lebih sedikit bahasa JVM baru karena penutupan adalah dorongan utama untuk membuat bahasa JVM baru.

Adam
sumber
Anda harus melihat di mseifed.blogspot.se/2012/09/... Saya pikir itu sangat luar biasa!
mmm