Page 30 - Yazılım Teknolojileri Araştırma Bülteni 2023
P. 30
30 | Java’da Fonksiyonel Programlama
Predicate<Integer> ciftSayi = sayi -> sayi % 2 -= 0;
Predicate<Integer> altiyaEsit = sayi -> sayi -= 6;
Predicate<Integer> ciftSayiVeAltiyaEsitDegil = ciftSayi.and(altiyaEsit.
negate());
System.out.println(ciftSayiVeAltiyaEsitDegil.test(3));
System.out.println(ciftSayiVeAltiyaEsitDegil.test(6));
System.out.println(ciftSayiVeAltiyaEsitDegil.test(4));
Bu kontrolün çıktısı da aşağıdaki gibi olacaktır:
false
false
true
3.4. Function
Function fonksiyon demektir ve bu fonksiyonel arayüz tipi matematikteki fonksiyon gibi
düşünülebilir. Argüman üzerinde gerekli işlemleri yapıp herhangi bir tipte veri döner. Arayüzde
tanımlı apply metodu ile argüman fonksiyona sokulabilir. Kendi dışındaki hiçbir değişkenin
durumunu etkilemeyen ve kendi dışındaki şeylerden etkilenmeyen fonksiyonlara saf (pure)
fonksiyon denir. Character tipinde veri alıp işlem sonrası Integer veri dönen örnek bir fonksiyon şu
şekilde tanımlanabilir:
public class Main {
static Function<Character, Integer> karakterinIntDegeriniGetir =
(ch) -> Character.getNumericValue(ch);
public static void main(String args[]) {
System.out.println(karakterinIntDegeriniGetir.apply(‘a’));
System.out.println(karakterinIntDegeriniGetir.apply(‘b’));
}
}
Bu çıktı olarak karakterlerin Integer değerleri olan aşağıdaki çıktıyı verecektir:
10
11
Bu arayüzün de iki argümanlı hali olan BiFunction öntanımlı olarak bulunmaktadır. BiConsumer
için verilen örnekte konsola yazdırılan String değerini, doğrudan dönen bir BiFunction şu şekilde
tanımlanabilir ve kullanılabilir: