Fungsi — JavaScript

Coba bayangin masak bakso: cuci bahan, potong, didihin, taro mie, masukin bakso, sajiin. Lima langkah yang harus diulang tiap mau masak. Daripada nulis ulang la

Coba bayangin masak bakso: cuci bahan, potong, didihin, taro mie, masukin bakso, sajiin. Lima langkah yang harus diulang tiap mau masak. Daripada nulis ulang langkah satu-satu setiap kali, kamu kasih nama "buatBakso" — sekali manggil nama itu, semua langkah otomatis jalan. Itu fungsi di JavaScript: blok kode yang bisa dipanggil berulang kali, kasih input (parameter), terima output (return). Tanpa fungsi, kode kamu jadi spaghetti panjang yang ngulang-ngulang. Dengan fungsi, kode jadi rapi dan reusable.

🤔 Filosofi penting. Fungsi bagus = ngerjain SATU hal dengan jelas. hitungTotal() bagus. hitungTotalDanPrintInvoiceDanKirimEmail() jelek — itu 3 fungsi disamarin jadi 1. Aturan ini namanya "Single Responsibility Principle", filosofi ribuan tahun yang masih relevan di kode modern.

function sapa(nama) {
  return "Halo, " + nama + "!";
}

console.log(sapa("Budi")); // "Halo, Budi!"

Fungsi membantu kita menghindari pengulangan kode dan membuat program lebih terstruktur.

💡 Di lesson berikutnya (Arrow Functions), kamu akan lihat sintaks singkat modern: const sapa = (nama) => "Halo, " + nama + "!" — fungsi yang sama, ditulis lebih ringkas.

<title id="fn-t">Fungsi sebagai mesin: parameter masuk, return keluar.</title>Fungsi = mesin: input → proses → outputPARAMETER"Budi"(input)function sapareturn "Halo, " + nama + "!"(proses)RETURN"Halo, Budi!"(output)Mesin yang sama bisa dipakai berkali-kali dengan input berbeda.return kasih hasil ke pemanggil. Tanpa return, output = undefined.
Pemanggil = orang yang panggil fungsi (misalnya sapa("Budi")) dan dapat hasil return.

🎭 Analogi sehari-hari

Fungsi = mesin di dapur warung:

Mesin yang sama bisa dipakai berkali-kali dengan bahan berbeda — kasih ekstra gula, hasil kopi manis. Kasih sedikit gula, kopi pahit. Mesinnya satu, hasilnya tergantung input.

⚠️ Jebakan yang sering ditemui

🎯 function vs arrow => — pilih yang mana?

  • Top-level helper, named utilityfunction nama() {} (hoisted, stack trace pake nama)
  • Callback singkat satu-baris (di map, filter, event handler) → arrow =>
  • Method dalam object literal → method shorthand { namaMethod() {} } (BUKAN arrow — this salah)
  • Method dalam class → method biasa (BUKAN arrow di prototype, kecuali class field arrow)
  • Butuh this dari scope luar (callback dalam class method) → arrow (lexical this)
  • Butuh arguments objectfunction (arrow gak punya)

Aturan praktis: arrow buat callback inline. function buat top-level + method. Sisanya tergantung this mau dari mana.

TL;DR: Function = blok kode reusable: terima parameter, return output. Sintaks: function nama(param) { return ... }. Single Responsibility — satu function, satu tugas. Lupa return = output undefined diam-diam. Object passed by reference (modify = ubah asli), primitive by value. Default param: function f(a, b = 0). Arrow => untuk callback inline, function untuk top-level/method. Hindari return di baris terpisah (ASI bug).

Yang akan kamu pelajari