hero image

3 minute read

Function dengan Banyak Parameter? Pakai Object Aja


Pernah gak sih, kamu manggil sebuah function di codebase (entah buatan sendiri atau warisan leluhur dev sebelumnya), terus isinya kayak gini:

sendEmail(
  "john@example.com", 
  "Hi John", 
  "Don’t forget the meeting", 
  false, 
  "info", 
  5000
);

Terus kamu mikir… “Yang false ini maksudnya apa ya? Jangan-jangan malah harusnya true?”

Yap. Selamat datang di dunia function dengan parameter berderet, tempat di mana error terjadi bukan karena logic, tapi karena kamu salah urut atau lupa arti dari parameter kelima.

Nah, daripada hidup kita penuh rasa ragu dan scrolling ke definisi function tiap saat, kenapa gak pakai pendekatan yang lebih santuy tapi powerful?

Yuk kita bahas best practicenya: pake object sebagai parameter kalau udah lebih dari dua. Kenapa? Gini ceritanya…

🧩 Analogi Dulu, Biar Enak

Bayangin kamu lagi diminta beli barang ke Indomaret. Temen kamu ngasih list belanjaan gini:

beliBarang(
  "Teh Botol", 
  2, 
  "Aqua 600ml", 
  1, 
  true
);

Tunggu… mana yang teh, mana yang air putih, dan true itu maksudnya apaan?

Lebih enak kan kalau dia bilang:

beliBarang({
  minuman1: { nama: "Teh Botol", jumlah: 2 },
  minuman2: { nama: "Aqua 600ml", jumlah: 1 },
  pakaiKantong: true,
});

Jelas. Terstruktur. Gak bikin kamu nelpon balik nanya “Ini beneran teh botol 2?”

😵 Masalah Function dengan Parameter Berderet

Kita lihat contoh function di bawah ini:

function createNotification(
  title: string,
  message: string,
  type: "success" | "error" | "info",
  duration: number,
  isPersistent: boolean
) {
  // ...
}

Ketika dipanggil:

createNotification(
  "Login Success", 
  "Welcome back!", 
  "success", 
  3000, 
  false
);

Masalahnya:

  • Gak keliatan maksudnya 3000 dan false itu apa.
  • Urutan penting banget. salah urutan function bisa tidak berjalan.

✅ Solusi Elegan: Pakai Object sebagai Parameter

Yuk refactor function-nya menggunakan object sebagai parameter:

type NotificationOptions = {
  title: string;
  message: string;
  type: "success" | "error" | "info";
  duration?: number;
  isPersistent?: boolean;
};

function createNotification({
  title,
  message,
  type,
  duration = 3000,
  isPersistent = false,
}: NotificationOptions) {
  // ...
}

Sekarang begini cara memanggilnya:

createNotification({
  title: "Login Success",
  message: "Welcome back!",
  type: "success",
});

Parameternya dibolak-balik juga functionnya masih jalan:

createNotification({
  type: "success",
  message: "Welcome back!",
  title: "Login Success",
});

Dipanggil dengan parameter yang lengkap

createNotification({
  title: "Server Down",
  message: "Call DevOps ASAP!",
  type: "error",
  duration: 5000,
  isPersistent: true,
});

Lebih readable, kan? #angguk-angguk

🎁 Bonus: Pakai TypeScript Jika Ingin Hidup Lebih Indah

Dengan pendekatan ini, TypeScript jadi makin berguna karena:

  • Auto-suggest: Kamu tinggal ketik { title: " maka editor langsung bantuin kasih suggestion.
  • Error catching: Salah ketik properti? TypeScript ngamuk duluan.
  • Optional parameter? Tinggal tambahin ? di tipe-nya. Gak perlu overload yang ribet.

🕳️ Tapi Hati-Hati…

Satu edge case yang sering kejadian: kalau lupa isi parameter, destructuring langsung error.

Misalnya kamu nulis:

createNotification(); // ❌ error: Cannot destructure 'undefined'

Solusinya: kasih default kosong di parameter utama:

function createNotification({
  title,
  message,
  type,
  duration = 3000,
  isPersistent = false,
}: NotificationOptions = {} as NotificationOptions) {
  // ...
}

Atau kalau kamu lebih suka cara aman:

function createNotification(options?: NotificationOptions) {
  const {
    title = "Default Title",
    message = "Default Message",
    type = "info",
    duration = 3000,
    isPersistent = false,
  } = options || {};
}

Jadi Typescript gak langsung marah-marah kalau functionnya dipanggil tanpa argumen.

✨ TLDR

Kalau function kamu punya lebih dari dua parameter, apalagi yang gak selalu dibutuhkan semua, pakai object sebagai parameter.

Keuntungannya:

  • Bikin kode kamu lebih jelas dan self-documenting
  • Gak pusing soal urutan
  • Lebih tahan perubahan di masa depan
  • TypeScript bisa bantuin lebih maksimal

🚀 Penutup: Kode yang Enak Dibaca = Kode yang Disayang

Di dunia nyata, yang baca kode kamu itu gak cuma mesin. Tapi juga rekan satu tim, bahkan kamu sendiri 6 bulan lagi (dengan kondisi ngantuk dan overthinking). Jadi, kenapa gak bantu diri sendiri dan orang lain dengan bikin function yang lebih jelas, lebih fleksibel, dan lebih TypeScript-friendly?

Mulai sekarang, kalau kamu lihat function dengan 4–5 parameter, coba tanya ke diri sendiri:

“Haruskah ini jadi object aja?”

Jawabannya hampir selalu: Iya.

Bagikan artikel:

X Facebook WhatsApp

Tambahkan Komen

Comments (0)

Failed to load comments.

👋 About Me

Hi, I'm Amir Zamzami, a passionate Full-Stack Developer who thrives on building clean, intuitive, and scalable digital products. I enjoy turning complex ideas into practical solutions through thoughtful design and efficient code, whether for the web, mobile, or hybrid platforms.

With a solid foundation in both frontend and backend technologies, I bring a product-focused mindset to every project. From crafting pixel-perfect UIs to developing robust APIs and integrating AI tools.

Feel free to check out my work on Github or connect with me on LinkedIn