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.
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