Ana içeriğe geç
Modül 7 · Ders 1 ders 2Kurstaki 13/14~12 min
Modül dersleri (1/2)

Lambda İfadeleri

Java 8'den itibaren işlevsel programlama Lambda İfadeleri aracılığıyla desteklenmektedir. Bir lambda ifadesi esas olarak yöntemlere argüman olarak aktarılabilen veya değişkenlerde saklanabilen anonim bir yöntemdir (isimsiz bir işlev).

Fonksiyonel Arayüzler

Lambda ifadesi yalnızca İşlevsel Arayüzün gerekli olduğu durumlarda kullanılabilir. İşlevsel bir arayüz, tam olarak bir soyut yöntem bildiren bir arayüzdür. Java bu arayüzleri isteğe bağlı @FunctionalInterface ek açıklamasıyla işaretler.

Kullanıcı tanımlı işlevsel arayüz örneği:

Java
@FunctionalInterface
interface MathOperation {
    int operate(int a, int b);
}

Java 8'den önce anonim bir iç sınıf tanımlamanız gerekiyordu. Lambda'larla sözdizimi şu şekilde basitleştirilmiştir:

Java
MathOperation addition = (a, b) -> a + b;
int result = addition.operate(5, 3); // Returns 8

Lambda İfadelerinin Yapısı

Bir lambdanın temel sözdizimi şöyledir:

Code
(parameters) -> { body }
  • Parametreler olmadan: () -> System.out.println("Hello")
  • Tek parametre: x -> x * 2 (parantez kullanılmayabilir)
  • Birden fazla parametre: (x, y) -> x + y
  • Çok satırlı gövde: Gövde birden fazla ifade içeriyorsa, {} parantezleri ve açık bir return ifadesi gereklidir.
Java
MathOperation detailedAddition = (a, b) -> {
    System.out.println("Adding...");
    return a + b;
};

Java'da Standart İşlevsel Arayüzler

java.util.function paketi çeşitli yerleşik işlevsel arayüzler sağlar:

  • Predicate<T>: T türünde bir bağımsız değişkeni kabul eder ve bir boole değeri döndürür (test(T t) yöntemi).
  • Consumer<T>: T türünde bir bağımsız değişkeni kabul eder ve sonuç döndürmeden bir işlem gerçekleştirir (accept(T t) yöntemi).
  • Function<T, R>: T bağımsız değişkenini kabul eder ve R (apply(T t) yöntemi) sonucunu döndürür.
  • Supplier<T>: hiçbir argümanı kabul etmez ve T (get() yöntemi) türünde bir değer döndürür.

Kendin dene

Egzersiz#java.m7.l1.e1
Denemeler: 0Yükleniyor…

İki tam sayıyı toplayan bir lambda ifadesi kullanarak Hesap Makinesi arayüzünü başlatarak kodu tamamlayın. Daha sonra 5 ve 3'ü geçerek hesaplama yöntemini çağırın ve sonucu yazdırın.

Düzenleyici yükleniyor…
İpucu göster

'Hesap Makinesi toplayıcı = (a, b) -> a + b;' komutunu bildirin ve ardından yazdırma çağrısında 'adder.calculate(5, 3)' komutunu çağırın.

3 denemeden sonra çözüm mevcut

Egzersiz#java.m7.l1.e2
Denemeler: 0Yükleniyor…

Dize uzunluğunun 5 karakterden büyük olup olmadığını kontrol eden bir lambda ifadesi kullanarak isLong adlı standart işlevsel arabirimin Predicate<String> örneğini oluşturun. Daha sonra 'merhaba dünya' için test sonucunu yazdırın.

Düzenleyici yükleniyor…
İpucu göster

Bir `Predicate<String>` için lambda, `s` parametresini alır ve bir boole koşulu olarak `s.length() > 5` değerini döndürür.

3 denemeden sonra çözüm mevcut

Egzersiz#java.m7.l1.e3
Denemeler: 0Yükleniyor…

Üzerinde sort() yöntemini çağırarak ve Karşılaştırıcıyı uygulayan bir lambda ifadesi ileterek (iki s1, s2 dizesini alıp bunları CompareTo kullanarak karşılaştırarak) dize adları listesini alfabetik olarak sıralayın.

Düzenleyici yükleniyor…
İpucu göster

Listeyi yerinde sıralamak için `names.sort((s1, s2) -> s1.compareTo(s2));' komutunu kullanın.

3 denemeden sonra çözüm mevcut