Java OOP Rehberi: Lambda İfadeleri ve Fonksiyonel Arayüzler

  • Merhaba, değerli Jetto Net forumu takipçileri!

    Java nesne yönelimli programlama (OOP) serimize devam ediyoruz. Bir önceki yazıda sizlere, Java'nın verileri saklama, düzenleme ve yönetmesi için sunduğu güçlü bir araç olan Collections Framework'ü incelemiştik. Bu yazıda ise Java 8 ile gelen ve kodları daha okunaklı ve fonksiyonel bir hale getiren Lambda ifadelerini ve fonksiyonel arayüzleri inceleyeceğiz.

    Lambda İfadeleri (Lambda Expressions) Nedir?

    Lambda ifadeleri, Java'da metotları ifade etmenin kısa ve öz yöntemidir. Lambda ifadeleri, isimsiz fonksiyonlar olarak da bilinmektedir çünkü bir isme sahip olmak zorunda değiller. Bu ifadeler, genellikle tek bir amaca yönelik küçük kod bloklarını temsil etmektedir. Genel yapısı şu şekilde olmaktadır:

    (parametre listesi) -> { ifade veya kod bloğu }

    Örnek olarak, toplama işlemi yapan bir lambda ifadesi yazalım:

    Kod
    (int a, int b) -> { return a + b; }
    • Yukaridaki örnekte, lambda ifadesi iki tamsayı parametresi almaktadır. (int a, int b): Lambda ifadesinin parametre listesidir.
    • ->: Lambda operatörüdür. Parametre listesini ifade veya kod bloğundan ayırır.
    • { return a + b; }: Lambda ifadesinin gövdesidir. Yukardaki örnekte, lambda ifadesi iki parametreyi toplayıp sonucu döndürmektedir.

    Fonksiyonel Arayüzler (Functional Interfaces) Nedir?

    Fonksiyonel arayüzler, sadece bir tane abstract (soyut) metodu olan arayüzlerdir. Lambda ifadeleri, fonksiyonel arayüzlerin soyut metotlarını uygulamak için kullanılır. Bu sayede, lambda ifadeleri fonksiyonel arayüzler aracılığıyla kullanılabilir hale gelir.

    Java 8 ile birlikte java.util.function paketinde birçok hazır fonksiyonel arayüz eklenmiştir. En sık kullanılan fonksiyonel arayüzlerden bazıları şunlardır:

    • Predicate<T>: Bir T türündeki nesneyi alır ve boolean bir değer döndürür.
    • Consumer<T>: Bir T türündeki nesneyi alır ve herhangi bir değer döndürmez.
    • Function<T, R>: Bir T türündeki nesneyi alır ve R türünde bir nesne döndürür.
    • Supplier<T>: Herhangi bir parametre almaz ve T türünde bir nesne döndürür.

    Lambda İfadeleri ve Metot Referansları

    Lambda ifadeleri yerine, mevcut bir metodu referans göstererek de aynı işlevi yerine getirebiliriz. Bu yönteme metot referansı diyoruz. Metot referansları, kodun daha da okunabilir olmasını sağlar.

    Kod
    // Lambda ifadesi
    list.forEach(x -> System.out.println(x));
    // Metot referansı
    list.forEach(System.out::println); 

    Stream API ile Koleksiyonlar Üzerinde Fonksiyonel İşlemler

    Java 8 ile birlikte gelen Stream API, koleksiyonlar üzerinde fonksiyonel işlemler yapmamızı sağlar. Lambda ifadeleri ve metot referansları, Stream API ile birlikte kullanılarak koleksiyonları filtreleme, sıralama, dönüştürme gibi işlemleri daha kolay ve okunabilir bir şekilde yapmamıza olanak tanır.

    Kod
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    List<Integer> evenNumbers = numbers .stream()
                                     .filter(x -> x % 2 == 0)
                                     .collect(Collectors.toList());

    Yukardaki örnekte, bir tamsayı listesini filtreleyerek sadece çift sayıları içeren yeni bir liste oluşturduk.

    Sonuç

    Lambda ifadeleri ve fonksiyonel arayüzler, Java'ya fonksiyonel programlamanın gücünü getiren önemli özelliklerdir. Bu özellikleri kullanarak kodumuzu daha okunaklı, özlü ve esnek hale getirebiliriz.

    Bir sonraki yazımızda, OOP'nin diğer önemli kavramlarını incelemeye devam edeceğiz. Yorumlar kısmında sorularınızı veya görüşlerinizi yazabilirsiniz.

    İyi Kodlamalar!

Şimdi katılın!

Henüz hesabınız yok mu? Topluluğumuzun aktif bir üyesi olun ve oyunlarla, yazılımlarla ilgili ilginç konuları keşfedin! Kaydolun ve tartışmalara katılın, deneyimlerinizi paylaşın ve yeni arkadaşlar edinin. Topluluğumuzda herkesin kendine göre bir yer bulabileceğinden eminiz. Hadi, gelin ve bizimle birlikte eğlenceli ve bilgilendirici bir yolculuğa çıkın!