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;
menjadi
let x = 1 + 6;
atau (lebih baik) menjadi
let x = 7;
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;
}
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));
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);
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;
}
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;
}
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)