Batas satu unit kode

Kapan sebuah fungsi harus dipecah, kapan memecahnya justru memperburuk, dan kenapa jumlah baris bukan jawabannya.

IngatTidak ada soal yang menyertai pelajaran ini dan menyelesaikannya tidak menggeser satu pun rating. Yang dibahas di sini keputusan tanpa jawaban tunggal, dan memberinya angka berarti berpura pura ia dapat diuji.

Jumlah baris bukan ukurannya

Aturan yang paling sering diulang tentang ukuran fungsi adalah aturan jumlah baris: satu fungsi tidak boleh lebih dari dua puluh baris, atau sepuluh, atau lima. Aturan itu populer karena ia mudah diperiksa mesin, bukan karena ia benar. Fungsi tiga baris yang menyentuh basis data, memformat tanggal, dan mengirim email tetap fungsi yang buruk.

Ukuran yang lebih berguna adalah jumlah alasan untuk berubah. Sebuah unit kode berada pada batas yang tepat ketika hanya ada satu jenis perubahan permintaan yang menyentuhnya. Kalau perubahan aturan pajak dan perubahan format tampilan keduanya mengharuskan Anda membuka fungsi yang sama, fungsi itu memegang dua tanggung jawab tanpa memandang panjangnya.

Ringkasan

  • Hitung alasan berubah, bukan baris. Dua alasan berbeda di satu unit berarti dua orang akan menyentuhnya bersamaan.
  • Perhatikan kata penghubung pada namanya. muatDanKirim hampir selalu dua unit yang dijahit.
  • Perhatikan parameter penanda. Parameter boolean yang mengubah alur besar biasanya menandai dua fungsi yang dipaksa menjadi satu.
  • Perhatikan tingkat abstraksi yang bercampur. Satu unit yang memanggil aturan bisnis sekaligus mengatur indeks array memaksa pembacanya berpindah pikiran di tengah pembacaan.

Memecah terlalu jauh juga punya biaya

Sekarang arah sebaliknya, yang lebih jarang dibicarakan. Memecah terlalu jauh punya biayanya sendiri, dan biaya itu ditanggung pembaca. Rangkaian delapan fungsi yang masing masing dipanggil tepat satu kali dari satu tempat memaksa pembaca melompat delapan kali untuk memahami satu alur yang sebenarnya lurus. Yang hilang bukan kerapian, melainkan kemampuan membaca alurnya sebagai satu cerita.

Dipecah tanpa alasan

SET bersih = bersihkanSpasi(masukan)
SET kecil = jadikanHurufKecil(bersih)
SET tanpaTanda = buangTandaBaca(kecil)
OUTPUT tanpaTanda

Satu unit bernama sesuai maksudnya

SET kunci = normalkanKunciPencarian(masukan)
OUTPUT kunci

Ketiga langkah di kolom kiri tidak pernah dipakai sendiri sendiri dan selalu berubah bersamaan, sebab ketiganya satu keputusan yang sama tentang apa yang dianggap kunci pencarian setara. Menamainya sebagai satu unit menyembunyikan tiga langkah yang memang tidak perlu dilihat, dan pembaca mendapat satu nama alih alih tiga.

Uji praktis yang dapat dipakai di tengah tinjauan kode: bacakan nama unitnya, lalu tanyakan apakah pembaca dapat menebak apa yang tidak dilakukannya. Kalau ia dapat, batasnya jelas. Kalau ia harus membuka isinya untuk mengetahui apakah suatu efek samping terjadi di dalam, batasnya belum ada.

Keputusan batas ini yang kemudian menentukan bentuk dokumen kebutuhan. Satu butir kebutuhan yang menyentuh lima unit terpisah adalah pertanda batasnya dipotong menurut lapisan teknis alih alih menurut permintaan yang datang. Materi berikutnya pada tingkat ini membahas penulisan dokumen kebutuhan dengan urutan yang terbalik: mulai dari perubahan yang akan diminta, baru batas kodenya.

Periksa pemahaman

Sebuah fungsi berisi enam baris: membaca konfigurasi, menghitung ongkos kirim, lalu menuliskan hasilnya ke log audit. Aturan ongkos kirim berubah setiap kuartal, format log audit berubah setahun sekali. Mana penilaian yang paling tepat?

  • Batas yang tepat ditentukan jumlah alasan berubah, bukan jumlah baris.
  • Dua irama perubahan yang berbeda di satu unit adalah pertanda paling kuat untuk memecah.
  • Memecah unit yang selalu berubah bersamaan menambah biaya baca tanpa menambah apa pun.
  • Kalau pembaca harus membuka isinya untuk mengetahui apa yang tidak dilakukannya, unit itu belum punya batas.