Pengenalan Fungsional Java

Fungsional Java adalah istilah tentang pendekatan pemrograman fungsional di bahasa Java.

Pertanyaannya ?

Bukankah selama ini Java adalah bahasa pemrograman berorientasi object ??

Dan bukankah selama ini Java menjadikan Class atau Object sebagai komponen utamanya??

Fungsi dan method hanya bisa diakses dengan memanggil Class atau Object nya dulu.

Dengan kata lain Class atau Object adalah first-priority. Semuanya diakses melalui Class atau Object. Behaviour dan State selalu diminta diakses lewat Class atau Object.

Pembuktian

Mari kita lihat :

  1. kelas java.lang.Math, yang biasa digunakan untuk kalkulasi. Didalamnya ada fungsi/method sum, min, max, sqrt, dll. Tetapi untuk mengakses fungsi tersebut, kita harus memanggil nama Class Math nya dulu. Misal : Math.max(1,5), Math.sqrt(25). Contoh ini namanya static method yang tetap mesti dipanggil menggunakan nama class nya terlebih dahulu , Math.

  2. contoh lain, misalnya kita akan melakukan extract file .xls atau .csv. Biasanya kita akan membuat sebuah class tertentu, misalnya CsvExtractor.java. Didalamnya ada fungsi extractContent(File csvFile) untuk melakukan fungsi mengambil isi dari file csv tersebut. Maka untuk menggunakan fungsi tersebut, kita akan melakukan code seperti ini :

    1File file = new File("uploadedFile.csv");
    2CsvExtractor csvExtractor = new CsvExtractor();
    3String[] contents = csvExtractor.extractContent(file)
    coba lihat !!, fungsi extractContent(File csvFile) hanya bisa dipakai dengan melakukan instansiasi class CsvExtractor terlebih dahulu.

  3. Bahkan, untuk sebuah cara yang dinamakan anonymous inner classes, kita pun harus melakukan instansiasi class terhadapnya. Misalnya :

     1// CODE 1
     2
     3// interface validator
     4public interface Validator() {
     5  boolean isValid(String s);
     6}
     7
     8// class implementasi dari interface Validator
     9Validator validator1 = new Validator() {
    10  @Override
    11  public boolean isValid(String s) {
    12    return s.equals("string yang diharapkan");
    13  }
    14}
    15
    16boolean isStringValid = validator1.isValid("string biasa"); // return "false"
    17
    18// CODE 2
    19// unanomious instance
    20boolean isStringValid = new Validator() {
    21  @Override
    22  public boolean isValid(String s) {
    23    return s.equals("string yang diharapkan");
    24  }
    25}.isValid("string biasa");   // return "false"
    

Baiklah kalau begitu, berarti tidak ada yang salah dengan class sebagai first priority nya bahasa Java kan ?

Tidak ada yang salah, bahkan sampai saat sekarang pun kita masih tetap bisa menggunakan code seperti yang diatas itu. Dan itu tetap Valid !

Lalu kenapa ada fungsional programming muncul di bahasa Java ini ?

Apakah karena :

  1. Tren bahasa fungsional di tahun-tahun belakanganan.

    –> Bisa jadi, salah satu alasan kenapa adanya feature fungsional di Java.

  2. Lebih mudah dan jelas dalam menggantikan fungsi Functor yang sebelumnya ada di bahasa Java.

    –> Ya, banyak design pattern yang digunakan di bahasa java menggunakan konsep ini.

  3. Yang paling terpenting adalah mudah dalam melakukan pemrosesan paralel, terutama memproses struktur data yang bertipe collection. Optimasi dari pemrosesan ini dilakukan dari library java , dan bukan oleh client code

    Coba kita lihat code berikut :

    1List<String> hewanList =
    2          Arrays.asList("Kucing", "Ayam", "Sapi", "Kambing", "Kelinci");
    3
    4List<String> filteredHewans = hewanList
    5                                  .stream()
    6                                  .filter(hewan -> hewan.startsWith("K"))
    7                                  .collect(Collectors.toList());
    8
    9System.out.println(filteredHewans);


    Hasilnya:
    1[Kucing, Kambing, Kelinci]


Fungsi filter dan collect merupakan fungsi dari library fungsional java. Didalamnya sudah dilakukan optimasi pemrosesan, sehingga kita sebagai Software Engineer tidak perlu melakukan optimasi secara manual, misalnya dengan membuat thread sendiri untuk pemrosesan tersebut. Inilah maksudnya memakasi optimasi oleh library java daripada optimasi dari client code.

Berarti Java bukan pemrograman berorientasi objek lagi dong ???

Masih tetap dong. Fungsional programming ini sifatnya adalah fitur di dalam bahasa Java. Kalau kita lihat di level library nya Java, method fungsional ini didalamnya sebenarnya dibungkus oleh object juga. Jadi fungsional Java ini masih tetap Object yang dibungkus seakan-akan sebagai fungsional.

Dengan fitur ini, maka Java Software Engineer merasakan feel pemrograman fungsional di Java. Pemrograman fungsional berarti membiasakan method atau fungsi sebagai first class dalam memrogram aplikasi.