Java’da lambda fonksiyonları hayatınızı nasıl kolaylaştırabilir ?

Java 8 ile birlikte gelen fonksiyonel programlama stili yazılımcıların hayatını ciddi anlamda kolaylaştırmaktadır. Güzel bir örnekle durumu açıklayalım. Diyelim ki size gelen String ifadeleri, kelimelerin uzunluklarına göre sıralamak istiyorsunuz.

public class SortFourWays {
public static void main(String[] args) {
List<String> words = Arrays.asList(args);

// TODO : sort according to String length
}
}

Aklımıza hemen Collections sınıfının sort metodu gelir

 
// Anonymous class
Collections.sort(words, new Comparator<String>() {
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
});

İlk tercih Java 8 öncesi çözüm olan Anonymous (isimsiz) sınıf kullanarak bu işi halletmektir. Java Swing veya Apache Wicket da çok kullanılan anonymous sınıfların dezavantajı okumalarının zor olmasıdır. Java 8 fonksiyonel programlama tarzı tam da bu noktada devreye girer. İşte Java 8 ile baştan yazarsak.

// Lambda ifadalesi, anonymous sınıfın yaptığını yapmaktadır
Collections.sort(words,
(s1, s2) -> Integer.compare(s1.length(), s2.length()));

Daha bitmedi, acaba bu Lambda ifadesi daha da kısaltabilir miyiz ?

  Collections.sort(words, comparingInt(String::length)); 

Peki daha da kısası olabilir ?

 words.sort(comparingInt(String::length)); 

Java 8 ile birlikte gelen fonksiyonel programlama stili kodun sadeleşmesine ciddi katkı sunmaktadır ve fakat bu yeni fonksiyonel programlama stili, geleneksel nesneye yönelik programlama dünyasına alışkın olanların ciddi hatalar yapmasına sebebiyet verebilir.

Bu sene 5. düzenlenecek olan Java Day 2019 ‘da fonksiyonel programlama stili uygularken dikkat edilmesi gereken noktaları Brian Vermeer katılımcılara detaylı bir şekilde anlatacaktır.

Java Day 2019 ile ilgili daha detaylı bilgi almak için web adresini ziyaret edebilirsiniz.

Kaynaklar : Effective Java Kitabı : https://www.amazon.com/Effective-Java-Joshua-Bloch/dp/0134685997

No Comments

Post a Comment

Comment
Name
Email
Website