← Belajar

KELAS GRATIS / BAHASA INDONESIA

Fungsi: satu tanggung jawab yang bisa diuji

Fundamental Engineering · Materi 7 dari 20

0 / 20 selesaiDisimpan di browser ini

MATERI 07 / 20

Fungsi: satu tanggung jawab yang bisa diuji

Fungsi membantu memberi nama pada sebuah pekerjaan dan menyembunyikan langkah-langkahnya di balik kontrak yang jelas. Ukuran kode bukan satu-satunya ukuran fungsi yang baik.

Mulai dari kontrak

Tulis apa yang diterima, apa yang dikembalikan dan kondisi yang ditolak. Fungsi hitungTotal menerima harga dan jumlah, lalu mengembalikan total rupiah. Mengirim email di dalam fungsi yang namanya hanya menghitung total mengejutkan pemanggil dan membuat pengujian lebih rumit.

Pisahkan perhitungan dan efek

Perhitungan yang hanya bergantung pada input mudah dicoba dengan data kecil. Membaca database, mengubah layar atau menulis berkas adalah efek yang membutuhkan konteks. Keduanya tetap berguna, tetapi pemisahan membuat sumber kegagalan lebih jelas. Jangan mengandalkan variabel global tersembunyi untuk mengubah hasil perhitungan.

Beri nama berdasarkan hasil pekerjaan

Nama validasiPesanan menjelaskan tujuan lebih baik daripada prosesData. Fungsi boleh memanggil fungsi lain, tetapi hindari memecah setiap baris tanpa manfaat. Cari batas yang memiliki aturan sendiri, dipakai ulang, atau perlu diuji terpisah. Dokumentasikan alasan batas tersebut jika perilakunya tidak langsung terlihat.

CONTOH UNTUK DIPIKIRKAN
function hitungTotal(harga, jumlah) {
  if (harga < 0 || jumlah < 1) throw new Error("Input tidak valid")
  return harga * jumlah
}
// Kontrak latihan: harga angka hingga, jumlah bilangan bulat positif.
// Pemeriksaan tipe/lengkap dilakukan sebelum memanggil fungsi.

Giliran kamu.

Pisahkan alur checkout latihan menjadi hitungTotal, validasiInput dan simpanPesanan. Tandai bagian yang dapat diuji tanpa jaringan atau database.

  • Input dan output dijelaskan
  • Efek samping terlihat dari kontrak
  • Ada contoh berhasil dan gagal
Cek pemahaman

Bagian mana paling mudah diuji tanpa infrastruktur?

Bacaan pendamping

MDN JavaScript Guide