DataLens

Function dan arrow function

Kemas logika ke dalam function yang bisa dipakai ulang dengan parameter, nilai default, dan nilai kembalian, tulis arrow function yang ringkas, dan oper function sebagai nilai.

Level: Dasar · 8 menit baca

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Idenya

Function adalah potongan logika yang diberi nama dan bisa dipakai ulang: beri input, ia memberikan output. Kamu sudah memakai yang bawaan (console.log, Math.round, Number). Menulis function sendiri adalah cara berhenti mengulang kode dan mulai membangun program dari potongan-potongan kecil yang mudah dipahami, persis seperti function di Python.

Mendeklarasikan dan memanggil

Toko Kita menampilkan harga dengan PPN 11% sudah termasuk, dan perhitungan itu dibutuhkan di halaman produk, di keranjang, dan saat checkout. Daripada menulis price * 1.11 di ketiga tempat itu, kamu memberi nama pada perhitungannya sekali, lalu memakainya di mana pun dibutuhkan:

function addVat(price) {
  return Math.round(price * 1.11);
}

console.log(addVat(95000));
console.log(addVat(250000));
105450
277500

Parameter dan nilai default

Ongkos kirim untuk sebagian besar pesanan adalah 12000 per kilo, tapi kadang berlaku tarif lain, seperti pengiriman ekspres. Nilai default membuat function memakai tarif biasa kecuali kamu menyebutkan yang lain:

function shippingCost(weightKg, perKg = 12000) {
  return weightKg * perKg;
}

console.log(shippingCost(2));
console.log(shippingCost(2, 15000));
console.log(shippingCost());
24000
30000
NaN

Arrow function

Banyak function berupa satu baris yang sangat pendek, dan menulis function, kurung kurawal, dan return untuk masing-masing jadi bertele-tele. JavaScript modern punya cara yang lebih pendek untuk menulisnya, disebut arrow function, dan kamu akan melihatnya di mana-mana:

const addVat = (price) => Math.round(price * 1.11);
const formatRupiah = (amount) => "Rp " + amount.toLocaleString("id-ID");
const greet = () => "Selamat datang!";
const lineTotal = (price, qty) => {
  const subtotal = price * qty;
  return subtotal > 500000 ? subtotal * 0.95 : subtotal;
};

console.log(formatRupiah(addVat(95000)));
console.log(greet());
console.log(lineTotal(200000, 3));
Rp 105.450
Selamat datang!
570000

Arrow function dan deklarasi function berperilaku sama untuk pemakaian sehari-hari. Perbedaannya (this dan hoisting) muncul di modul 9; untuk sekarang, pakai arrow untuk helper pendek dan callback, dan gaya mana pun untuk function bernama.

Function adalah nilai

Function bisa disimpan di variabel, dimasukkan ke objek, atau dioper ke function lain. Yang terakhir itu ada di mana-mana di JavaScript:

const prices = [95000, 120000, 45000];

function applyToAll(values, fn) {
  const result = [];
  for (const value of values) {
    result.push(fn(value));
  }
  return result;
}

console.log(applyToAll(prices, addVatTo));

function addVatTo(price) {
  return Math.round(price * 1.11);
}

console.log(applyToAll(prices, (p) => p / 1000 + "k"));
[105450, 133200, 49950]
["95k", "120k", "45k"]

Function yang dioper ke function lain disebut callback. Event handler (modul 6), method array seperti map dan filter (modul 8), dan timer semuanya menerima callback.

Perhatikan bahwa addVatTo dipakai sebelum deklarasinya. Deklarasi function di-hoist: JavaScript membuatnya tersedia di seluruh scope-nya. Arrow function yang disimpan di const tidak: memakainya sebelum barisnya akan menimbulkan error.

Rest parameter

Kadang kamu tidak tahu sebelumnya berapa banyak nilai yang akan diterima sebuah function. Total keranjang bisa dua barang atau dua puluh. Rest parameter mengumpulkan argumen sebanyak apa pun yang diberikan ke dalam satu array:

function total(...amounts) {
  let sum = 0;
  for (const amount of amounts) sum += amount;
  return sum;
}

console.log(total(95000, 120000, 45000));
console.log(total());
260000
0

...amounts mengumpulkan semua argumen ke dalam sebuah array, seperti *args di Python.

Ide utama

Function menerima parameter (dengan default opsional) dan me-return sebuah nilai. Arrow function ((x) => x * 2) adalah bentuk ringkasnya, dengan implicit return untuk ekspresi tunggal. Function adalah nilai: simpan, dan oper sebagai callback.

Mengapa ini penting untuk kode yang bersih

Function yang baik itu kecil, dinamai sesuai fungsinya, dan murni sebisa mungkin: input yang sama, output yang sama, tanpa efek samping tersembunyi. addVat(price) bisa dites dalam satu baris dan dipakai ulang di mana saja. Event handler 200 baris yang menghitung PPN di dalamnya tidak bisa. Sebagian besar sisa track ini membahas pemecahan kode menjadi function-function seperti ini.

Rangkuman

Latihan modul ini

Soal-soal untuk pelajaran ini berjalan di browser-mu dan langsung mengecek jawabanmu.

Berikutnya: Array dan objek →