Page 33 - Yazılım Teknolojileri Araştırma Bülteni 2023
P. 33

Java’da Fonksiyonel Programlama | 33

           Alternatif olarak; fonksiyon içinde fonksiyon kullanmak istenirse, şu şekilde bir kullanım da olabilir:



            @FunctionalInterface
            public interface NestedFunction {
                Integer apply(BiFunction<Integer, Integer, Integer> f,
                              Integer x, Integer y, Integer z);
            }

            public class NestedFunctionImpl implements NestedFunction {
                @Override
                public Integer apply(BiFunction<Integer, Integer, Integer> f,
                                     Integer x, Integer y, Integer z) {
                    return f.apply(x,y) * z;
                }
            }

            public class Main {
                public static void main(String args[]) {
                    BiFunction<Integer, Integer, Integer> function =
                            (x, y) -> x * y;


                    NestedFunction nestedFunction = new NestedFunctionImpl();
                    System.out.println(nestedFunction.apply(function, 10, 3, 5));
                }
            }


           Her değerin ayrı ayrı apply edildiği, bir üçlü çarpım metodu şu şekilde de tanımlanabilir:


            public class Main {
                public static void main(String args[]) {
                    Function<Integer,
                            Function<Integer,
                                    Function<Integer, Integer--> ucluCarpim
                            = x -> y -> z -> x * y * z;
                    System.out.println(ucluCarpim.apply(10).apply(3).apply(5));
                }
            }


           Bu yönteme Currying denmekle birlikte, dört yöntemin de çıktısı şu şekilde olacaktır:



            150


           Eğer functionların basit bir şekilde birbiri ardına çalışmalarını sağlamak isteniyorsa andThen burada
           da kullanılabilir.

           Örneğin aşağıdaki kodda yedi çıkarma ve ikiyle çarpma için iki farklı function tanımlanmış. Bunları art
           arda çalıştıracak yeni bir fonksiyonu andThen kullanarak tanımlanabilir. Burada ilk önce andThen’in
           çağrıldığı function çalışır ardından andThen’e argüman olarak geçilen function çalışır.
   28   29   30   31   32   33   34   35   36   37   38