DEV Community

Cover image for Mendekatkan Diri Kepada Functional Programming di Javascript ๐Ÿšถ
Fauzan
Fauzan

Posted on • Edited on

Mendekatkan Diri Kepada Functional Programming di Javascript ๐Ÿšถ

Bagaimana kalian menulis blok program, dan menggunakan paradigma apa adalah hal yang sangat penting dan vital bagi pemrogram, karena hal tersebut juga dapat menentukan bagaimana sebuah program berjalan dan berkembang selanjutnya. ๐Ÿ˜‹

Kali ini saya akan membahas Functional Programming, karena terlalu banyak sudah yang membahas OOP dan procedural programming, akhirnya saya berinisiatif menyebarkan faham tentang paradigma pemrograman yang satu ini.

Functional Programming ๐Ÿ˜Ž

Functional Programming adalah ketika kita menulis kumpulan blok program menggunakan functions dan menghindari state dan data yang mutable (mutable berarti kita dapat dengan mudah membuat struktur data daripada memodifikasi yang sudah ada), bukan OOP (objects, classes, bottom-up approach) maupun procedural programming (every program start with function, top-down approach).

Basic Terminology and Concepts

Referential transparency

Dalam matematika, Referential transparency adalah properti yang memungkinkan kita mengganti ekspresi dengan nilainya, dan tidak mengubah hasil dari apa pun yang kita lakukan.

Sebagai contoh menggunakan Javascript :

let x = 1 + 2 * 3;
Enter fullscreen mode Exit fullscreen mode

menjadi

let x = 1 + 6;
Enter fullscreen mode Exit fullscreen mode

atau (lebih baik) menjadi

let x = 7;
Enter fullscreen mode Exit fullscreen mode

untuk menghemat waktu eksekusi, ini memanfaatkan fakta bahwa semua ekspresi dan fungsi matematika (menurut definisinya) adalah transparan secara referensial.

Modular approach

Modular approach adalah proses pengelompokan program komputer menjadi sub-program terpisah menggunakan functions, dimana functions ini bisa digunakan di aplikasi lain atau functions lainnya.

Desain modular dapat meningkatkan produktivitas. Modul kecil dapat dikodekan dengan lebih cepat dan memiliki peluang lebih besar untuk digunakan kembali (DRY Don'T RepeaT YourselF) yang tentunya mengarah pada pengembangan program yang lebih cepat. Selain itu, modul dapat diuji secara terpisah (unit testing) yang membantu kita mengurangi waktu yang dihabiskan untuk pengujian unit dan debugging.

Maintainability

Maintainability adalah istilah sederhana yang berarti pemrograman FP lebih mudah dipelihara karena kita tidak perlu khawatir secara tidak sengaja mengubah apa pun di luar fungsi yang diberikan.

First-class Function

First-class Function adalah definisi, yang dikaitkan dengan entitas bahasa pemrograman yang tidak memiliki batasan dalam penggunaannya. Oleh karena itu, first-class function dapat muncul di mana saja dalam program.

di JavaScript first-class function adalah function yang berarti kita dapat menyimpannya dalam variabel, objek, dan array.

Sebagai contoh menggunakan Javascript :

let isOdd = (n) => {
  return n % 2 === 0;
}
Enter fullscreen mode Exit fullscreen mode

dengan higher order function

let isOdd = (n) => {
  return n % 2 === 0;
}
let arr = [0,1,2,3,4,5,6,7];
let oddArray = (arr) => {
  let proxyArr = [];
  //imperative approach
  arr.forEach((el) => {
    isOdd(el) ?
     proxyArr.push(el) :
     '';
  });
  return proxyArr;
}
console.log(oddArray(arr));
Enter fullscreen mode Exit fullscreen mode

dengan filter() (functional approach)

let isOdd = (n) => {
  return n % 2 === 0;
}

let numbers = [0,1,2,3,4,5,6,7];

let oddNumbers = numbers.filter(isOdd,[]);

console.log(oddNumbers);
Enter fullscreen mode Exit fullscreen mode

Closure

Closures adalah fungsi dalam yang dapat mengakses variabel dari fungsi induk, bahkan setelah fungsi induk dijalankan.

Contoh closure ada pada bagian higher order function diatas.

Pure Function (Accessor Method)

Pure Function adalah fungsi yang inputnya dideklarasikan sebagai input dan tidak ada satupun yang harus disembunyikan. outputnya juga dideklarasikan sebagai output.

Pure Function bekerja berdasarkan parameternya. Tidak efisien jika tidak me-return apapun. Selain itu, ia menawarkan return yang sama untuk parameter yang diberikan.

Contoh pure function pada Javascript :

function pure(a,b)
{
   return a+b;
}
Enter fullscreen mode Exit fullscreen mode

Impure Function (Mutator Method)

Impure Function adalah kebalikan dari pure function. Fungsi ini memiliki input atau output tersembunyi; itu disebut impure. Impure Function tidak dapat digunakan atau diuji secara terpisah karena memiliki ketergantungan.

Contoh impure function pada Javascript :

let z;
function impure(){
   z = z+10;
}
Enter fullscreen mode Exit fullscreen mode

Function Composition

Function Composition adalah proses menggabungkan 2 fungsi atau lebih untuk membuat yang baru.

Shared State

Shared State adalah state (bisa berupa variabel, ataupun objek) yang dibagikan.

Side Effects

Side Effects adalah efek samping setiap perubahan keadaan yang terjadi di luar function yang dipanggil. Tujuan terbesar dari setiap functional programming language adalah meminimalkan efek samping, dengan memisahkannya dari kode perangkat lunak lainnya. Dalam functional programming, sangat penting untuk menghilangkan efek samping dari sisa logika pemrograman.

Kenapa Functional Programming ?

Secara general, alasan kenapa kita harus memilih functional programming karena paradigma ini powerful, expressive dan fun (contohnya menggunakan fungsi filter dari javascript sebelumnya, itu fun dan expressive, loh kenapa expressive? karena kita sudah tau bagaimana mengoperasikan fungsinya).

Benefit lainnya :

  • Memungkinkan kita menghindari masalah dan kesalahan yang membingungkan dalam kode (expressive, fun)
  • Lebih mudah menguji dan menjalankan unit testing, dan debugging. (powerfull, fun)
  • Pemrosesan Paralel, dan Concurrency (powerfull)
  • Hot code deployment and fault tolerance (powerfull)
  • Menawarkan modularitas yang lebih baik dengan kode yang lebih pendek (powerfull, fun, expressive)
  • Meningkatkan produktivitas (fun)
  • Mendukung Nested Functions (powerfull)
  • Functional construction seperti Map , Filter , Reduce , dll. (fun, expressive)
  • Memungkinkan penggunaan Lambda Calculus secara efektif (powerfull)

Tamat

Sekian yang bisa saya sampaikan mengenai Functional Programming, Divide and Conquer! ๐Ÿ”ฅ

Terima kasih buat yang sudah baca โค๏ธ๐Ÿง ๐Ÿง โค๏ธ๐Ÿฆ„๐Ÿฆ„๐Ÿง โค๏ธ๐Ÿง 

Untuk penjelasan mengenai functional programming lainnya , saya sangat merekomendasikan slide di url berikut ini Functional Programming Forever.

Top comments (0)