1. Anasayfa
  2. Java

Lambda İşleci Nedir?


0

Özet

Java 8 ile birlikte Java diline lambda denilen ve -> ile gösterilen yeni bir işleç kazandırıldı. Lambda işleci tek bir metod içeren interface’ler için daha az kod yazarak anonim sınıflar oluşturmamızı sağlar.

Anonim iç sınıflar yeni bir sınıf tanımı yapmadan sadece gerektiği yerde ve sadece gerekli metodların üste yazılması ya da gerçeklenmesiyle nesnelerin yaratılmasına imkan verir. Bu özellikleriyle kodlama sırasında büyük bir esneklik sağlarlar. Anonim iç sınıflar olmasaydı, bir sınıftan extends anahtar kelimesiyle bir alt sınıf oluşturmak ya da implements anahtar kelimesi ile bir interface’i gerçeklemek zorunda kalacaktık. Eğer sınıf sadece bir kere çok özel bir işi yapmak için kullanılacaksa ya da her kullanıldığı yerde küçük de olsa farklılıklar varsa çok fazla sayıda yeni sınıf tanımı yapılacak ve kodun karmaşıklığı artacaktı.

Neyse ki anonim sınıflar var diyelim ve bir örnekle konumuza devam edelim. Görsel uygulamalarda genelde bir Button nesnesi kullanılır ve bu nesne üzerine basıldığında özel bir işlem yapar. Button sınıfı bu işlemi OnClickListener interface’ini kullanarak yapar. Yani Button sınıfından yarattığımız nesneye OnClickListener interface’ini gerçekleyen ve Button’a basıldığında yapılmasını istediğimiz şeyi yapabilen bir nesne vermemiz gerekir.

public
interface OnClickListener {

            void OnClick(Button sender);

}

Button nesnesinin setOnClickListener metodu ile anonim bir sınıf kullanılarak onClick olayı aşağıdaki gibi işlenmiş olur.

button.setOnClickListener(new OnClickListener(){

            @Override

            public void onClick(Button sender){

                System.out.println(sender + ” Buttonuna basıldı”);

            }

        });

OnClickListener anonim iç sınıfını incelediğimizde aslında onClick metodunun gövdesi dışında ki tüm yazımların zorunlu olarak yazıldığını görürüz. Java 8 ile beraber gelen Lambda (->) işleci işte bu zaten yazılması zorunlu olan kısımları yazmadan aynı işi yapmamızı sağlar.

button.setOnClickListener((Button sender) -> {

            System.out.println(sender + ” Buttonuna basıldı”);

     });

Button sınıfının setOnClickListener metodunun parametre olarak OnClickListener interface’ini gerçekleyen bir sınıf alacağını biliyoruz ve bu interface sadece bir metod içeriyor o da onClick metodu. Bu durumda Lambda işleci ile anonim bir sınıf tanımlarken sadece metodun parametre listesini ve metodun gövdesini yazabiliyoruz, interface tanımında zaten yazılı olan metod adını, public gibi anahtar kelimeleri tekrar yazmamıza gerek kalmıyor. Bir interface’den somut bir nesne yaratılamayacağı için new OnClickListener() kodu ile bir anonim sınıf nesnesi yaratılacağı da bellidir ve Lambda işleci ile bunu da ayrıca yazmamıza gerek kalmamaktadır. Bir Lambda işlecinin yazım şeklini incelediğimizde işleçten önceki kısmın onClick metodunun parametre listesi, işleçten sonra ki kısmın da onClick metodunun gövdesi olduğunu görüyoruz.

Buradan kolayca anlaşılacağı gibi bu işleci kullanabilmek için gerçeklenecek olan interface sadece bir adet metod tanımı içermelidir. Aksi takdirde lambda işlecinde metodun adını da yazamadığımız için hangi metodun gövdesini yazacağımız belli olamıyor.

SONUÇ

Java 8 ile birlikte tek metod içeren bir interface’den anonim sınıf tanımlamalarını daha az kod yazarak yapabileceğiz. Bu durum kodun anlaşılırlığını biraz düşürüyor olabilir. Bugüne kadar standart olan ve göz aşinası olduğumuz bir tanımlama yerine, metodun isminin bile olmadığı ve değişik karakterlerin (Lambda işleci) karşımıza çıktığı bir yazım şekline alışmak için biraz zamana ihtiyacımız var gibi.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

Bu İçeriğe Tepkin Ne Oldu?
  • 1
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Lisans eğitimini Yıldız Teknik Üniversitesi Elektronik ve Haberleşme Mühendisliğinde tamamladı. İTÜ Biyomedikal Mühendisliğinden ve Bahçeşehir Üniversitesi Mühendislik Yönetiminden Yüksek Lisans derecelerini aldı. Telekominikasyon sektörünün öncü firmalarından Netaş’da yazılım mimarı olarak çalışmaktadır. Okan Üniversitesinde 2 yıl Java’ya Giriş ve Dağıtık Yazılım Uygulamaları derslerini verdi.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir