Java'daki kapaklar Java Topluluğunu nasıl etkiler?


11

Java: Closures için planlanan en çok konuşulan özelliklerden biridir. Birçoğumuz onları özlüyoruz. Bazılarımız (ben dahil) biraz sabırsızlandık ve boşluğu doldurmak için senaryo dillerine yöneldik.

Ancak, kapanışlar sonunda Java'ya ulaştığında: Java Topluluğunu nasıl etkileyecekler? VM hedefli komut dosyası dillerinin ilerlemesi yavaş yavaş taranacak mı, aynı mı kalacak, yoksa mı olacak? İnsanlar yeni kapatma sözdizimine akın edecek, böylece Java kod tabanlarını daha işlevsel olarak yapılandırılmış uygulamalara dönüştürecek mi? Java'da yalnızca kapakların serpildiğini görecek miyiz? Araç / IDE desteğine etkisi ne olacak? Performans nasıl? Ve son olarak, Java'nın popülerlikte yükselen diğer dillerle karşılaştırıldığında, dil olarak sürekli benimsenmesi ne anlama geliyor?

En son önerilen Java Closure sözdizimi özelliklerinden birine örnek vermek için:

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

// ...

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

olacaktı ...

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

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


Gönderdiğiniz örnek yıllar önce - mevcut teklifleri temsil ettiğinden emin misiniz?
Daniel Earwicker

Öyle olmayabilir: örneğimi gözden geçirmekten çekinmeyin

3
Son zamanlarda Java kullanmayı az ya da çok durdurdum. Yine de kapanışları dört gözle bekliyorum.
Anto

@Daniel - bu şu anki teklif değil, burada daha güncel (ve çok farklı) bir şey var gibi görünüyor: baptiste-wicht.com/2010/05/…
Nicole

C # lambda ifadesi gibi mi?
Louis Rhys

Yanıtlar:


4

Sanırım pek çok 'sıradan' Java geliştiricisinin, bu tanıdık değilse başlarını bu kavramın etrafında tutması biraz zaman alacaktır, ancak yavaş yavaş düzenli olarak Java kullanımına, tüm faydalarımıza geçecektir. Java 5 geldiğinde jeneriklerin olduğu kadar çabuk benimsenmesi harika olurdu.

VM hedefli betik dillerini bu kadar kullanmanın tek avantajı kadar etkilemeyeceğini düşünüyorum.


3

Herhangi bir parlak yeni araçla giden olağan bir döngü var:

  • İstismar eden yeni kullanıcıların bir telaşı ile kitlesel heyecan. Bu, yeni aracın sınırlarını ve nasıl kullanılabileceğini anlamamıza yardımcı olduğu için normal ve sağlıklıdır.
  • Daha fazla rezerve edilmiş insanlar komşu söyleyecek ve erken evlat edinenleri aptallık edecek
  • Sonunda, heyecan yıpranıyor ve erken benimseyenler yeni aracı kullanmanın sağlıklı yollarına yerleşiyor
  • Daha fazla rezerve edilmiş insanlar yeni aracı kullanarak insanların verimliliğini kıskandıracak ve benimsemeye başlayacak - şimdi sağlıklı kalıpları kullanarak.

Bu işlemin tamamlanması birkaç yıl alır. Ek açıklamalar ve jenerikler için geçerliydi ve kapanışlar için de geçerli olacak.

Komut dosyası yazma diline etkisi:

  • Kapanışları destekleyen diller için, bu senaryo yazarlarının işlerini daha verimli yapmalarına yardımcı olacaktır. Kapakları nasıl kullanacaklarını zaten bildiğinden, mutlaka çılgın şeyler yapmayacaklar.
  • Kapakları desteklemeyen diller için bu büyük ölçüde yok sayılır.

1

Çok iş parçacıklı programlamayı sevenler, Java ile Lisp arasındaki dil empedans uyumsuzluğu nedeniyle sıralı olmayanlara başvurmaya gerek kalmadan, değiştirilemez veri yapılarını Java'ya yerleştirebilecek ve bunları daha lisp benzeri bir şekilde işleyebileceklerdir.

Yukarıdakilerin hiçbirini kullanmayan (veya anlamayan), aynen daha önce yaptıkları gibi şeyler yapabilir.


1
Bu anlamlı değil. Kapakların diş çekme veya değiştirilebilirlik ile ilgisi yoktur.
davidk01

Onlar yapar. Doğru kapanma, beyin patlaması olmadan çalışmak için değişmezlik gerektirir.
permeakra

Hayır. Kapatma, içinde yaratıldığı ortamı bilen bir kod parçasıdır. İşte bu kadar.
davidk01

1
@ davidk01 tanım TAMAM, ancak kapatma değiştirilebilir değişkene bağlantı olduğunda, sonuç değişkeni ile değişir. Genellikle, bu istediği şey değildir, ancak derleyici itiraz etmezse, hata neredeyse tespit edilemez.
permeakra

1
@ davidk01 Hayır, bilmiyorum. Demek istediğim, kapanışların / lambdasların yakalanan değişkenlerin değişmezliğiyle bağlanmış olmaları durumunda iyi çalışıyor. Aksi takdirde Tzeentch'in merhametindesiniz ve burada sadece özel ibadet edenlerin şansı var.
permeakra

1

Kapatmaları bilen kişilerin bunları uygulama kodunda kullanmaya başlayacağından şüpheleniyorum. Java'nın eski sürümleriyle geriye dönük uyumluluğu korumak için bir süre kitaplıklardan kaçınırlar.

Diğer dillerdeki kapanışlara aşina olmayan programcılar bunları Java'da kabul etmekte yavaş olacaktır.

Generics, yükseltme yaptığınızda ortaya çıkan tüm uyarılar ve SDK'ya dahil olmaları nedeniyle kısmen Java'ya tanıtıldıklarında hızla benimsenmiştir. Bu, kapaklar için geçerli olmayacaktır. Varlıklarına dair kanıt bulmak daha zor olacaktır, bu yüzden sadece onları kullanmak isteyenler bunları kullanacaktır.

Diğer JVM komut dosyası dillerinin geliştirilmesinin duracağını düşünmüyorum. Bu diller, kapanışların yanı sıra ivme ve birçok özelliğe sahiptir. Bununla birlikte, yeni JVM dillerini oluşturmak için ana itici güç olduğu için daha az yeni JVM dili görebiliriz.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.