Menghapus kode yang tidak dapat dijangkau
Dalam bahasa yang diketik secara statis berprinsip, Anda harus selalu tahu apakah kode tersebut benar-benar dapat dijangkau atau tidak: hapus, kompilasi, jika tidak ada kesalahan, maka kode itu tidak dapat dijangkau.
Sayangnya, tidak semua bahasa diketik secara statis, dan tidak semua bahasa yang diketik secara statis berprinsip. Hal-hal yang bisa salah termasuk (1) refleksi dan (2) kelebihan beban berprinsip.
Jika Anda menggunakan bahasa yang dinamis, atau bahasa dengan refleksi yang cukup kuat bahwa potongan kode di bawah pengawasan berpotensi dapat diakses saat run-time melalui refleksi, maka Anda tidak dapat bergantung pada kompiler. Bahasa tersebut termasuk Python, Ruby atau Java.
Jika Anda menggunakan bahasa dengan kelebihan beban yang tidak berprinsip, maka menghapus kelebihan beban bisa dengan mudah mengubah resolusi kelebihan beban ke kelebihan beban lainnya secara diam-diam. Beberapa bahasa seperti itu memungkinkan Anda memprogram peringatan / kesalahan waktu kompilasi yang terkait dengan penggunaan kode, jika tidak, Anda tidak dapat mengandalkan kompiler. Bahasa tersebut termasuk Java (gunakan @Deprecated
) atau C ++ (gunakan [[deprecated]]
atau = delete
).
Jadi, kecuali Anda sangat beruntung bekerja dengan bahasa yang ketat (Rust datang ke pikiran), Anda mungkin benar-benar menembak diri sendiri dengan mempercayai kompiler. Dan sayangnya test suite umumnya tidak lengkap sehingga tidak banyak membantu.
Beri tanda pada bagian selanjutnya ...
Menghapus kode yang berpotensi tidak digunakan
Kemungkinan besar, kode tersebut sebenarnya direferensikan, namun Anda curiga bahwa dalam praktiknya cabang-cabang kode yang merujuknya tidak pernah diambil.
Dalam hal ini, apa pun bahasanya, kode ini dapat dijangkau dengan mudah, dan hanya instrumentasi run-time yang dapat digunakan.
Di masa lalu, saya telah berhasil menggunakan pendekatan 3-fase untuk menghapus kode tersebut:
- Pada setiap cabang yang diduga TIDAK diambil, catat peringatan.
- Setelah satu siklus, lempar pengecualian / kembalikan kesalahan saat memasukkan potongan kode tertentu.
- Setelah siklus lain, hapus kodenya.
Apa itu siklus? Ini adalah siklus penggunaan kode. Sebagai contoh, untuk aplikasi keuangan saya akan mengharapkan siklus bulanan pendek (dengan gaji dibayarkan pada akhir bulan) dan siklus tahunan yang panjang. Dalam hal ini, Anda harus menunggu setidaknya satu tahun untuk memverifikasi bahwa tidak ada peringatan yang pernah dikeluarkan untuk inventaris akhir tahun yang dapat menggunakan jalur kode yang tidak pernah digunakan.
Semoga sebagian besar aplikasi memiliki siklus yang lebih pendek.
Saya menyarankan untuk memberikan komentar TODO, dengan tanggal, memberi nasihat kapan harus melanjutkan ke langkah berikutnya. Dan pengingat di kalender Anda.