Lambda Expressions in Java

Lambda ifadeleri, Java 8’de daha özlü ve okunabilir kodlar yazmanıza izin veren yeni bir özelliktir. Geliştiricilerin Java’da işlevsel stilde kod yazmasını kolaylaştırmak için tanıtıldılar ve o zamandan beri Java dilinin temelini oluşturdular.

Bir lambda ifadesi esasen anonim bir işlevdir. Daha sonra çalıştırılmak üzere iletebileceğiniz bir kod bloğudur. Bir lambda ifadesi, anonim bir iç sınıfın kısaltması olarak düşünülebilir.

Bir lambda ifadesinin sözdizimi basittir. Bir lambda ifadesinin temel biçimi şöyledir:

(parameters) -> expression 

Burada parametreler, lambda ifadesinin girdi olarak aldığı değişkenlerin bir listesidir ve ifade, lambda çağrıldığında yürütülen koddur.

Lambda ifadeleri genellikle işlevsel arabirimlerle birlikte kullanılır. İşlevsel bir arabirim, tek bir soyut yöntemi tanımlayan bir arabirimdir. Java 8, java.util.function.Function, java.util.function.Consumer ve java.util.function.Supplier gibi bir dizi yerleşik işlevsel arabirim içerir.

Örneğin, java.util.function.Function arabirimi, application adlı tek bir soyut yöntemi tanımlar:

@FunctionalInterface

public interface Function<T, R>

{ R apply(T t);

}

Bu yöntemi uygulamak için bir lambda ifadesi kullanabilirsiniz:

Function<Integer, Integer> square = x –> x * x;

Bu lambda ifadesi, girdi olarak bir Tamsayı alır ve bu Tamsayı’nın karesini döndürür.

Başka bir örnek, accept adlı tek bir soyut yöntemi tanımlayan java.util.function.Consumer arabirimidir:

@FunctionalInterface 

public interface Consumer<T> {

void accept(T t);

}

Bu yöntemi uygulamak için bir lambda ifadesi kullanabilirsiniz:

Consumer<Integer> print = System.out::println;

Bu lambda ifadesi, girdi olarak bir Tamsayı alır ve bunu konsola yazdırır.

Lambda’lar, koleksiyonlardaki verileri işlemek için de çok kullanışlıdır. Örneğin, bir tamsayı listesini artan düzende sıralamak için bir lambda ifadesi kullanabilirsiniz:

List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5);

numbers.sort((a, b) -> a.compareTo(b));

Bu örnekte, sort yöntemi bir Karşılaştırıcıyı girdi olarak alır ve lambda ifadesi Karşılaştırıcı arabiriminin karşılaştırma yöntemini uygular.

Son olarak, hata işlemeyi basitleştirmek için lambdalar da kullanılabilir. Örneğin, bir istisna oluşturan bir java.util.concurrent.Callable’ı işlemek için bir lambda ifadesi kullanabilirsiniz:

Callable<Integer> callable = () -> {

if (Math.random() < 0.5) {

throw new IllegalStateException(“Random number too low”);

}

return 42;

};

try {

Integer result = callable.call();

System.out.println(“Result: “ + result);

} catch (Exception e) {

System.out.println(“Caught exception: “ + e.getMessage());

}

Bu örnekte, Callable, üreten bir lambda ifadesidir.

İbrahim Ebrar AKÇAKOYUN