Functional Programming

Apa, Mengapa, dan Bagaimana

Joshua Randiny
HMIF ITB Tech
3 min readApr 27, 2019

--

Bagi sebagian besar orang di dunia software engineering, mungkin istilah paradigma pemrograman bukan hal yang asing. Ada banyak paradigma pemrograman yang ada sekarang, salah satunya adalah pemrograman fungsional. Pemrograman fungsional sendiri bukan konsep baru, beberapa bahasa pemrograman seperti LISP dibangun menggunakan konsep ini.

Konsep Fungsional

Pure Function

Suatu fungsi sebenarnya dapat dibagi menjadi dua tipe, yaitu fungsi murni dan tidak murni. Fungsi murni adalah fungsi yang memenuhi dua kriteria:

  1. Jika diberikan input yang sama, sebuah fungsi murni harus mengembalikan output yang sama.
  2. Sebuah fungsi murni tidak boleh mengubah variabel atau data di luar scope-nya, termasuk inputnya (semua input bersifat pass by value).

First Class Function

Kalau bicara tentang parameter fungsi, apa yang muncul pertama di pikiran? Mungkin integer, objek, atau array. Pernakah terpikirkan bahwa fungsi juga dapat diberikan sebagai parameter?

Fungsi modifyArray menerima sebuah array dan fungsi yang akan diaplikasikan ke semua item. Output dari kode di atas adalah [3, 4, 5]. Selain itu, fungsi juga dapat dijadikan output dari fungsi lain.

Dapat dilihat dari kode di atas, fungsi generateAdder menerima input angka dan mengembalikan sebuah fungsi yang gunanya menambah inputnya sejumlah angka. Variabel addTwo akan diisi dengan fungsi yang menerima input dan mengembalikan input tersebut setelah ditambah dua.

Recursion

Rekursi adalah hal yang biasa dalam dunia pemrograman. Namun, pada paradigma fungsional, rekursi lebih banyak dipakai. Suatu fungsi dikatakan rekursif saat fungsi tersebut memanggil dirinya sendiri.

Mengapa Fungsional

Thread-Safe

Di dunia sekarang ini multithreading sudah menjadi hal yang sangat dibutuhkan. Server bekerja dengan prinsip banyak core untuk melayani banyak permintaan sekaligus. Namun, jika program yang berjalan di atasnya tidak thread-safe bisa banyak masalah yang muncul.

Pemrograman fungsional memastikan prinsip thread-safe terpenuhi karena desainnya yang tidak mengijinkan adanya state dan passing variabel selalu bersifat pass by value. Tanpa adanya state, antar thread tidak mungkin saling mengganggu. Sebenarnya bahasa pemrograman prosedural dapat dibuat thread-safe dengan menggunakan lock dan teman-temannya, namun hal tersebut dapat berakibat pada meningkatnya kompleksitas kode.

Testing dan Debugging

Testing pada program fungsional akan menjadi lebih mudah karena tiap fungsi dapat diuji secara independen dan tidak terpengaruh sebuah state global. Setiap fungsi akan punya input dan output yang tidak akan berubah tiap kali berjalan.

Proses debugging juga akan lebih mudah karena dapat dicari dengan mudah fungsi apakah yang salah. Sebuah fungsi di mana pun dan kapan pun saat dijalankan harus punya hasil yang sama. Oleh karena itu, saat debugging yang perlu diperhatikan hanya variabel dalam satu fungsi. Berbeda dengan pemrograman prosedural, seorang programmer harus melihat kondisi dan isi tiap variabel/state yang mempengaruhi eksekusi.

Bagaimana Caranya

Misalkan penjelasan di atas cukup meyakinkanmu untuk belajar pemrograman fungsional, bagaimana cara untuk mengaplikasikan konsep fungsional tersebut?

Mungkin yang pertama dipikirkan adalah belajar bahasa pemrograman fungsional, namun hal tersebut memakan waktu yang sangat lama. Lebih baik untuk perlahan tapi pasti mengimplementasikan unsur-unsur fungsional pada bahasa yang sudah dikuasai.

Sebagian besar bahasa modern mendukung unsur-unsur pemrograman fungsional, misal JavaScript, Kotlin, Java, dan lainnya.

Sebagai contoh, pada JavaScript ada fungsi manipulasi array yang dibuat berdasar paradigma fungsional:

Program akan memfilter array input untuk hanya memperbolehkan angka genap. Setelah itu semua elemen akan dikali dua dengan timesTwoFunction, map adalah fungsi yang akan mengaplikasikan sebuah fungsi ke tiap elemen array. Terakhir, akan dijumlahkan dengan fungsi sumFunction. Fungsi tersebut akan dijalankan ke semua elemen dengan fungsi reduce JavaScript.

Penutup

Pemrograman fungsional adalah sebuah paradigma dengan berbagai konsep unik dan menarik. Konsep-konsep tersebut mempunyai banyak kelebihan yang dapat mempermudah hidup seorang programmer dan meningkatkan kualitas kode. Implementasinya tidak harus dilakukan dengan bahasa fungsional karena sebagian besar bahasa pemrograman modern mendukung aspek-aspek fungsional.

--

--