Memecah langkah jadi satu tugas
Ukurannya bukan jumlah baris, melainkan jumlah alasan sebuah fungsi bisa berubah. Satu fungsi yang mengerjakan dua hal akan diubah dua kali lebih sering.
Sebaiknya baca lebih dulu: Penamaan yang jujur.
Saran yang paling sering diberikan soal fungsi panjang adalah memecahnya. Sarannya benar, tetapi ukurannya biasanya salah: yang dipakai jumlah baris, padahal jumlah baris tidak memberi tahu apa pun tentang isinya. Fungsi tiga puluh baris yang mengerjakan satu hal lebih mudah dirawat daripada fungsi delapan baris yang mengerjakan tiga hal.
IngatMenyelesaikan materi tingkat lanjut tidak menggeser satu pun rating sumbu. Rating hanya bergerak lewat pengiriman di arena.
Ukurannya alasan berubah, bukan panjang
Pertanyaan yang lebih berguna: ada berapa alasan berbeda yang bisa membuat fungsi ini diubah? Kalau aturan pajak berubah, apakah fungsi ini disentuh? Kalau format tampilannya berubah, apakah fungsi yang sama disentuh lagi? Setiap jawaban ya adalah satu alasan. Fungsi dengan tiga alasan akan diubah tiga kali lebih sering, dan setiap perubahan menanggung risiko merusak dua urusan yang tidak diminta berubah.
Tiga alasan berubah dalam satu fungsi
FUNCTION laporan(pesanan) SET total = 0 FOR EACH item IN pesanan DO SET total = total + item.harga END FOR SET total = total + total * 0.11 OUTPUT "Total: Rp " + total END FUNCTION
Satu alasan per fungsi
FUNCTION jumlahHarga(pesanan) SET total = 0 FOR EACH item IN pesanan DO SET total = total + item.harga END FOR RETURN total END FUNCTION FUNCTION tambahPajak(nilai) RETURN nilai + nilai * 0.11 END FUNCTION
Kolom kiri berubah bila cara menjumlah berubah, bila tarif pajak berubah, dan bila format tampilannya berubah. Tiga alasan, satu tempat. Kolom kanan memisahkan dua di antaranya, dan sebagai hadiahnya jumlahHarga dapat diuji tanpa menyebut pajak sama sekali. Perhatikan juga bahwa yang di kolom kanan lebih panjang; memecah langkah menambah baris, dan itu bukan kerugian.
Tanda yang paling dapat dipercaya
- Namanya menuntut kata dan. hitungDanKirim mengumumkan dua tugas sebelum satu baris isinya dibaca.
- Komentar di dalamnya berfungsi sebagai judul bagian. Setiap komentar semacam itu adalah nama fungsi yang belum dibuat.
- Mengujinya menuntut menyiapkan hal yang tidak berhubungan dengan yang sedang diuji.
- Satu bagian memakai variabel yang tidak disentuh bagian lainnya sama sekali. Dua kelompok variabel yang tidak bertemu biasanya dua tugas.
Memecah terlalu jauh juga cacat
Arah sebaliknya sama merusaknya, dan lebih jarang disebut. Fungsi satu baris yang hanya dipakai satu kali menambah satu nama yang harus diingat pembaca tanpa menyembunyikan apa pun. Membaca alurnya lalu berubah menjadi melompat antar tujuh tempat untuk merangkai kembali sesuatu yang tadinya terbaca menurun.
Dipecah tanpa menyembunyikan apa pun
FUNCTION tambahSatu(n) RETURN n + 1 END FUNCTION SET berikutnya = tambahSatu(indeks)
Dibiarkan sebaris
SET berikutnya = indeks + 1
Kolom kiri menuntut pembaca membuka satu tempat lain untuk mengetahui sesuatu yang sudah jelas di tempatnya. Pemecahan berguna ketika ia menyembunyikan kerumitan; di sini tidak ada kerumitan yang disembunyikan, jadi yang tersisa hanya biayanya.
Periksa pemahaman
Sebuah fungsi berisi dua puluh baris. Bagian atasnya menyaring pesanan yang belum lunas, bagian bawahnya menyusun teks kuitansi. Keduanya dipisahkan satu komentar. Mana penilaian yang paling tepat?
- Hitung alasan berubah, bukan baris. Satu alasan per fungsi.
- Setiap komentar yang berfungsi sebagai judul bagian adalah nama fungsi yang belum dibuat.
- Memecah langkah menambah jumlah baris. Itu harga yang dibayar untuk mengurangi jumlah alasan berubah.
- Pemecahan yang tidak menyembunyikan kerumitan hanya menambah nama yang harus diingat.