Function & Reusability
Bayangkan Anda bekerja di sebuah restoran. Setiap kali ada pesanan "Nasi Goreng", koki tidak perlu belajar lagi dari awal cara memotong bawang atau memasak nasi. Koki sudah memiliki "resep" yang tersimpan di kepalanya. Di dunia pemrograman, resep tersebut disebut sebagai Function.
Function adalah blok kode yang dirancang untuk melakukan tugas tertentu. Kita menulis kodenya satu kali, lalu kita bisa memanggilnya (menjalankannya) berkali-kali di mana pun kita membutuhkannya. Ini membantu kita menghindari penulisan kode yang berulang-ulang (Don't Repeat Yourself atau DRY).
Apa itu Function?
Function memiliki dua fase utama:
- Deklarasi: Membuat resepnya (mendefinisikan apa yang dilakukan function).
- Invocasi (Pemanggilan): Memasak resepnya (menjalankan kodenya).
1// 1. Deklarasi Function
2function sapaDunia() {
3 console.log("Halo, selamat belajar JavaScript!");
4}
5
6// 2. Pemanggilan Function
7sapaDunia();
8sapaDunia();Parameter & Return
Sebuah function akan jauh lebih berguna jika bisa menerima data masukan. Masukan ini disebut Parameter. Selain menerima masukan, function juga bisa memberikan hasil kembali ke pemanggilnya menggunakan kata kunci return.
1function hitungLuasPersegi(sisi) {
2 let luas = sisi * sisi;
3 return luas; // Mengirimkan hasil keluar dari function
4}
5
6// Kita menyimpan hasil return ke dalam variabel
7let hasil1 = hitungLuasPersegi(5);
8let hasil2 = hitungLuasPersegi(10);
9
10console.log("Luas 1: " + hasil1); // 25
11console.log("Luas 2: " + hasil2); // 100Kenapa menggunakan return?
Tanpa return, sebuah function hanya melakukan tugas di dalam dirinya sendiri tanpa memberikan laporan hasil. Ibarat menyuruh seseorang menghitung belanjaan, tapi dia hanya menghitung di kepala tanpa memberi tahu Anda total harganya. Dengan return, nilai tersebut bisa kita olah kembali atau kita simpan ke variabel.
Function Declaration vs Expression
Ada dua cara umum untuk menulis function:
- Declaration: Cara klasik menggunakan kata kunci
functiondi awal. - Expression: Menyimpan function di dalam sebuah variabel.
1// Function Declaration
2function tambah(a, b) {
3 return a + b;
4}
5
6// Function Expression
7const kurang = function (a, b) {
8 return a - b;
9};
10
11console.log(tambah(10, 5)); // 15
12console.log(kurang(10, 5)); // 5Arrow Function (ES6+)
Di JavaScript modern, kita sering menggunakan Arrow Function. Sintaks ini lebih ringkas dan sangat populer dalam pengembangan aplikasi saat ini.
1const kali = (a, b) => {
2 return a * b;
3};
4
5// Jika hanya satu baris, bisa lebih singkat lagi (implicit return)
6const bagi = (a, b) => a / b;
7
8console.log(kali(4, 3)); // 12
9console.log(bagi(20, 4)); // 5Scope dalam Function
Hati-hati dengan variabel yang Anda buat di dalam function. Variabel tersebut bersifat Local Scope, artinya ia hanya dikenal di dalam function tersebut dan "mati" setelah function selesai dijalankan.
1let namaGlobal = "Budi"; // Bisa diakses di mana saja
2
3function testScope() {
4 let namaLokal = "Andi";
5 console.log(namaGlobal); // Bisa akses global
6 console.log(namaLokal); // Bisa akses lokal
7}
8
9testScope();
10console.log(namaGlobal); // Berhasil
11// console.log(namaLokal); // ERROR: namaLokal is not definedKesalahan Umum Pemula: Mencoba memanggil variabel yang dibuat di dalam function dari luar function. Jika Anda butuh nilai tersebut di luar, gunakanlah return.
Studi Kasus: Validasi Login
Mari kita gabungkan function, parameter, dan conditional.
1function cekLogin(user, pass) {
2 const userValid = "admin";
3 const passValid = "rahasia123";
4
5 if (user === userValid && pass === passValid) {
6 return "Akses diterima. Selamat datang!";
7 } else {
8 return "Akses ditolak. Username atau password salah.";
9 }
10}
11
12console.log(cekLogin("admin", "rahasia123")); // Berhasil
13console.log(cekLogin("hacker", "12345")); // GagalAlur Eksekusi:
- Function
cekLoginmenerima dua input (userdanpass). - Di dalam function, input tersebut dibandingkan dengan data valid menggunakan operator
&&. - Jika cocok, function berhenti dan mengirimkan string "Akses diterima...".
- Jika tidak cocok, ia mengirimkan string "Akses ditolak...".
Prediksi Output:
Apa yang terjadi jika kita memanggil console.log(cekLogin("admin", "salah"));?
Karena syarat && mewajibkan keduanya benar, dan pass yang dimasukkan tidak cocok, maka blok else akan dijalankan dan menghasilkan "Akses ditolak...".