Yang benar-benar Anda inginkan adalah menghilangkan referensi ad nauseum ke konstanta, apakah itu diberi nama atau kosong:
for_each_chess_square (row, col) {
/*...*/
}
Jika Anda benar-benar akan memperbanyak konstanta dengan mengulang loop seperti itu dan yang lainnya, yang terbaik adalah tetap melakukannya 8
.
8
menggambarkan diri sendiri; itu bukan makro yang berarti sesuatu yang lain.
You Ain't Never Gonna (TM) mengubahnya menjadi program catur 9x9 dan jika Anda melakukannya, proliferasi 8 tidak akan menjadi kesulitan utama.
Kita dapat mencari 150.000 basis kode baris untuk token 8, dan mengklasifikasikan kejadian mana artinya dalam hitungan detik.
Jauh lebih penting adalah memodulasi kode sehingga pengetahuan catur terkonsentrasi di tempat sesedikit mungkin. Lebih baik untuk memiliki satu, dua, mungkin tiga modul khusus catur di mana 8 literal terjadi, daripada tiga puluh tujuh modul dicampur dengan tanggung jawab spesifik catur, merujuk 8 melalui nama simbolis.
Ketika atau jika konstanta 8 ini menjadi sumber ketegangan dalam program Anda, Anda dapat dengan mudah memperbaikinya saat itu. Perbaiki masalah nyata yang sedang terjadi sekarang. Jika Anda tidak merasa terhambat oleh angka 8 itu, pergilah dengan naluri itu.
Misalkan di masa depan Anda ingin mendukung dimensi papan alternatif. Dalam hal itu, loop tersebut harus berubah apakah mereka menggunakan konstanta bernama atau 8
, karena dimensi akan diambil oleh beberapa ekspresi seperti board.width
dan board.height
. Jika sudah, BOARD_SIZE
alih - alih 8
, tempat-tempat ini akan lebih mudah ditemukan. Jadi itu kurang usaha. Namun, Anda tidak boleh lupa tentang upaya penggantian 8
dengan BOARD_SIZE
di tempat pertama. Upaya keseluruhan tidak lebih rendah. Membuat satu lulus melalui kode untuk perubahan 8
untuk BOARD_SIZE
, dan kemudian lain untuk mendukung dimensi alternatif, tidak lebih murah daripada hanya pergi dari 8
dukungan dimensi alternatif.
Kita juga dapat melihat ini dari analisis risiko / manfaat yang murni dingin, obyektif. Program ini memiliki konstanta kosong di dalamnya sekarang. Jika ini digantikan oleh konstanta, tidak ada manfaatnya; programnya identik. Dengan perubahan apa pun, ada risiko yang bukan nol. Dalam hal ini kecil. Namun, tidak ada risiko yang harus diambil tanpa manfaat. Untuk "menjual" perubahan dalam menghadapi alasan ini, kita harus berhipotesis manfaat: manfaat masa depan yang akan membantu dengan program yang berbeda: versi masa depan dari program yang tidak ada sekarang. Jika program semacam itu sedang direncanakan, hipotesis ini dan alasannya yang terkait adalah bonafid dan harus ditanggapi dengan serius.
Misalnya, jika Anda beberapa hari lagi menambahkan kode yang akan semakin memperbanyak konstanta ini, Anda mungkin ingin menghapusnya. Jika instance konstanta itu kira-kira semua instance yang pernah ada maka mengapa repot-repot.
Jika Anda pernah bekerja pada perangkat lunak komersial, argumen ROI juga akan berlaku. Jika suatu program tidak menjual, dan mengubah beberapa nomor kode-keras menjadi konstanta tidak akan meningkatkan penjualan, Anda tidak akan dikompensasikan dengan upaya tersebut. Perubahan tidak memiliki pengembalian investasi waktu. Argumen ROI menggeneralisasi di luar uang. Anda menulis sebuah program, menginvestasikan waktu dan usaha, dan mendapatkan sesuatu dari itu: itu pengembalian Anda, "R" Anda. Jika dengan melakukan perubahan itu sendiri, Anda mendapatkan lebih banyak dari "R" itu, apa pun itu, maka dengan segala cara. Jika Anda memiliki beberapa rencana untuk pengembangan lebih lanjut, dan perubahan itu meningkatkan "R" Anda, lagi. Jika perubahan itu tidak memiliki "R" yang dapat langsung atau dapat Anda lakukan, lupakan saja.