Lambda Expression ve Anonymous class arasındaki fark nedir?
Lamda epression anonim bir fonksiyon diye biliyorum. Yani Anonim bir functional interface class’ı Hatta @FunctionalInterface kullanılıyor,.
Lambda Expression ve Anonymous class arasındaki fark nedir?
Lamda epression anonim bir fonksiyon diye biliyorum. Yani Anonim bir functional interface class’ı Hatta @FunctionalInterface kullanılıyor,.
// Comments are closed.
Güzel. Bak hiç düşünmemiştim bu konuda. İyi soru olmuş.
Olayı birkaç açıdan düşünelim. Anoymous sınıflar java’da herhalde ilk versiyonlardan bu yana var. Lambda 1.8 yeni adıyla 8. versiyondan sonra eklendi. Anonymous sınıf yazmakla lambda yazmanın farkı; lambda yazmak kod yazmayı biraz azaltıyor, kolaylaştırıyor. Aynı örneği bir anonymous bir de lambda ile yazalım.
Önce anonymous sınıf.
Bu sınıfı yazıp sınıfımızı derlersek bize aşağıdaki gibi iki tane class dosyası oluşturuyor.
İlki AnonymousClassExample.class diğeri ise AnonymousClassExample$1.class Bunu zaten daha önceden biliyorduk. Java sınıfları derlerken eğer sınıf içinde bir anonymous sınıf varsa bunu ayrı bir sınıf olarak çıkarıyor. Beni şaşırtan kısım aşağıdaki kodun sonunda oldu.
Burada ise aynı kodu hem direk aynı metod ile hem de stream üzerinden lambda kullanarak denedim. Önceki görselde göreceğiniz üzere Lambda.class dosyası çıktı. Başka bir dosya oluşturmadı.
Kodları decompile ettiğim zaman aynen geri çıktı.
Sonuç olarak lambda yazdığımız zaman başka bir sınıf oluşturmadan derleyici/yorumlayıcı düzeyinde konu normal kod gibi devam ediyor.
AnonymousClass yazdığımız zaman ise bu başka bir sınıf gibi algılanıp derleniyor. Proje derleme aşamasında birbirine bağlanıyor.
Lambda fonksiyonlarında şunu hatırlıyorum; collection için stream kullanıyorsan map, foreach, filter gibi fonksiyonlar üzerinde performans iyileştirmeleri var. For kullanmakdan daha performanslı olduğunu iddia ediyorlar.