Seni Menulis Kode Bersih: Functional Programming
Kamu pasti pernah mengalami *Bugs* menakutkan ini: Kamu mengubah sebuah Array di Baris ke-10, tapi tiba-tiba
UI Websitemu di Baris ke-500 ikut hancur berantakan. Hal ini terjadi karena gaya *kodinganmu* saling
menjajah dan mengotori data satu sama lain (Side Effects).
Selamat datang di Paradigma Functional Programming (FP). Ini bukanlah kode *Framework*
baru, melainkan Pola Pikir (Mindset) gaya eksklusif untuk menulis kode yang anti-bocor,
stabil, dan bisa diprediksi. Ini adalah pondasi mutlak yang wajib kamu kuasai sebelum menyentuh
React.js maupun Next.js!
😇 1. Fungsi Suci tanpa Dosa (Pure Functions)
Fungsi di FP itu ibarat Mesin Pembuat Jus Jeruk. Mesin itu punya 2 Aturan Suci:
1. Jika kamu memberinya 2 Buah Jeruk, ia SELALU menghasilkan 1 Gelas Jus. Tidak pernah sekalipun ia
tiba-tiba menghasilkan Jus Apel (Bisa Diprediksi).
2. Mesin itu tidak boleh menghancurkan dapur tempat ia diletakkan (Tanpa Efek Samping / No Side
Effects).
❌ Impure Function (Kotor & Berbahaya)
let uangKas = 100000; // Variabel Global
function bayarListrik(tagihan) {
// 🚨 DOSA 1: Ia MERUSAK variabel di luar tubuhnya! (Side Effect)
uangKas = uangKas - tagihan;
// 🚨 DOSA 2: Bergantung pd angin cuaca.
// Jika dipanggil 2x dengan angka yg SAMA,
// hasilnya beda karena kas aslinya sudah berubah!
return uangKas;
}
✅ Pure Function (Suci & Dapat Diprediksi)
const uangKasAsli = 100000;
function hitungSisaUang(saldo, tagihan) {
// 🛡️ SUCI 1: Ia hanya bergantung pada DATA YANG MASUK (Parameter).
// 🛡️ SUCI 2: Ia TIDAK MENGUBAH `uangKasAsli` sedikitpun!
// Ia hanya mengirimkan DATA BARU sbg Kalkulasi kalkulator murni.
return saldo - tagihan;
}
const uangBaru = hitungSisaUang(uangKasAsli, 20000);
💎 2. Pantang Mutasi (Immutability)
Di dalam Kerajaan React.js dan Functional Programming, ada satu Undang-Undang Alam tertinggi: Kamu TIDAK BOLEH MENGUBAH Array atau Object yang sudah jadi! Alih-alih merusaknya (Mutasi), kamu WAJIB Memfotokopi (Clone) data aslinya, memberi coretan pada fotokopian tersebut, lalu menggantikan data aslinya dengan kertas hasil fotokopian yang baru!
// OBJEK KORBAN
const cartUser = { nama: "Andi", total: 1 };
// ❌ CARA TERKUTUK (MUTASI): Merobek/mengubah properti langsung
cartUser.total = 2; // HARAM DI REACT & REDUX!
koleksiBarang.push("Sepatu"); // HARAM! (.push mengubah array asli)
// ✅ CARA FP (IMMUTABLE): Jurus Clone Bayangan "Spread Operator (...)"
// Fotokopi Object `cartUser`, lalu cetak ulang properti `total` nya dgn tipe-X aslinya utuh!
const newCart = { ...cartUser, total: 2 };
// Menambahkan barang di Array TANPA Push!
// Bongkar isi lama (...koleksiBarang), tempel "Sepatu" di ujungnya membentuk Array BARU [ ]
const koleksiBaru = [...koleksiBarang, "Sepatu"];
🛒 Studi Kasus Mahakarya: Immutable Cart (Pemanasan React.js)
Inilah cara keranjang belanja modern dibangun! Di bawah ini tidak ada 1 pun metode .push() atau
manipulasi perusakan array[0] = X. Semua operasi Tambah, Ubah Jumlah, dan Hapus dilakukan
secara Suci melalui fungsi bawaan JS: Filter, Map, dan Spread Operator. Bukalah Tab
`app.js` untuk mengamati gaya penulisan state React.js level dewa!
🎯 Demo Live:
Sentuh Tombol UI di Bawah
🛒 Keranjang (0)
- Keranjang kosong,
tambahkan barang!
🛒 Keranjang (0)
- Keranjang kosong, tambahkan barang!
Aplikasi Toko Penjualan Kamera di atas 100% Bebas Bug Mutasi. Jika kamu mengklik "+1"
pada Lensa, ia tidak akan mengubah properti 'Lensa' aslinya. Melainkan ia memfotokopi data Lensa,
memperbarui qty nya menjadi 2 di dalam fotokopian tersebut, lalu JS menyingkirkan Data Lama dan
menggantikannya dengan Array Hasil Fotokopian Baru. (Ini adalah prinsip state useState di
React.js kelak!).