Java Util Function vs Metot Functionlar

Java Stream API

Yazı serisi boyunca çoğu function’a değindim aslında, bunların hepsi birer metot olarak’da yazılabilirdi. Bu yazı boyunca neden Java Util Function paketinin oluşturulduğunu anlatmaya çalışacağım.

Öncelikle ufak bir örnekle nasıl benzerlik gösterdiklerine değinelim.

public static boolean ciftMi(int x) {
    return x % 2 == 0;
}

public static void main(String[] args) {
    Predicate < Integer > ciftMe = (x) - > x % 2 == 0;
}

Bu iki fonksiyon görüldüğü üzere birbirinin aynısı işi yapmaktadır, yani sayının çift olup olmadığını kontrol eder. İlk fonksiyon bir metot olarak yazılmıştır. İkincisi ise lambda kullanılarak functional interface olan Predicate kullanılarak yazılmıştır.

ciftMi(30);
ciftMe.test(30);

Bu iki çağırma yöntemini ele alırsak ilkinin birinciye oranla daha yavaş çalışacağını söyleyebiliriz. Fakat ikincisinin ilkine oranla bir nesne üzerinden çağrıldığına dikkat çekelim. Burada aslında bizim sayının çift olup olmadığını kontrol eden bir nesnemiz var.

Nesneler java dili içerisinde metotlara parametere olarak gönderilebiliyor. Yani ikinci fonksiyonumuz nesne olduğundan dolayı bir metota parametre olarak gönderebiliriz. Buradan çıkartacağımız sonuç, bir metota fonkisyon gönderebiliyor olduğumuzdur.

public static void uygunsaYazdir(Predicate < Integer > fonk, int x) {
    if (fonk.test(x)) {
        System.out.println(x);
    }
}

public static void main(String[] args) {
    Predicate < Integer > ciftMi = (x) - > x % 2 == 0;
    uygunsaYazdir(ciftMi, 3);
    uygunsaYazdir(ciftMi, 6);
    uygunsaYazdir(ciftMi, 7);
    Predicate < Integer > tekmi = ciftMi.negate();
    uygunsaYazdir(tekmi, 1);
    uygunsaYazdir(tekmi, 11);
    uygunsaYazdir(tekmi, 12);

}

Yukarıdaki uygusaYazdir metotumuzu incelediğimizde parametre olarak nesne almasına karşın aslında bu nesne bir fonksiyon. Yani aslında bu metotumuz farklı fonksiyonlara göre farklı şekillerde çalışabilir.

Örnekte verildiği gibi çiftmi fonksiyonu parametre olarak gönderilirse, çift sayıları ekrana yazan bir metot, tekmi gönderilir ise tek sayıları yazan bir metot haline gelicektir.

Bunun gibi fonksiyonlar üzerinde bir çok işlem yapabiliriz çünkü bunlar artık birer nesnelerdir. Fonksiyonel programlamanın amacıda budur aslında, fonksiyonlarımızın sabit olması değil dinamik olmasıdır.


Similar Posts:
  1. Java 8 Stream - Fibonacci Stream Oluşturma
  2. Java 8 Stream - Parallel Stream Nedir?
  3. Java 8 Stream – concat Nedir? Nasıl Kullanılır?

Tags: java function, java functional programming, Java util function, java util function vs metot function