Sangat jelas jika Anda membaca kalimat pertama dari pertanyaan bahwa pertanyaan ini bukan tentang penggunaan yang tepat seperti
menghilangkan angka ajaib , ini tentang
konsistensi bodoh yang tidak ada artinya . Yang dimaksud dengan jawaban ini
Akal sehat memberi tahu Anda bahwa const char UPPER_CASE_A = 'A';
atau const char A = 'A'
tidak menambahkan apa pun selain pemeliharaan dan kompleksitas ke sistem Anda. const char STATUS_CODE.ARRIVED = 'A'
adalah kasus yang berbeda.
Konstanta seharusnya mewakili hal-hal yang tidak berubah pada saat runtime, tetapi mungkin perlu dimodifikasi di masa depan pada waktu kompilasi. Kapan akan const char A =
sama dengan benar selain dari apa A
?
Jika Anda melihat public static final char COLON = ':'
dalam kode Java, cari siapa yang menulis itu dan hancurkan keyboard mereka. Jika representasi untuk COLON
selamanya berubah dari :
Anda akan memiliki mimpi buruk pemeliharaan.
Kebingungan:
Apa yang terjadi ketika seseorang mengubahnya COLON = '-'
karena di mana mereka menggunakannya membutuhkan di -
mana-mana? Apakah Anda akan menulis unit test yang pada dasarnya mengatakan assertThat(':' == COLON)
untuk setiap const
referensi tunggal untuk memastikan mereka tidak berubah? Hanya ada seseorang yang memperbaiki tes ketika mereka mengubahnya?
Jika seseorang benar-benar berpendapat bahwa public static final String EMPTY_STRING = "";
itu bermanfaat dan bermanfaat, Anda hanya memenuhi syarat pengetahuan mereka dan mengabaikannya dengan aman pada hal lain.
Memiliki setiap karakter yang dapat dicetak yang tersedia dengan versi bernama hanya menunjukkan bahwa siapa pun yang melakukannya, tidak memenuhi syarat untuk menulis kode tanpa pengawasan.
Kohesi:
Itu juga secara artifisial menurunkan kohesi, karena itu menjauhkan sesuatu dari hal-hal yang menggunakannya dan terkait dengannya.
Dalam pemrograman komputer, kohesi mengacu pada sejauh mana unsur-unsur modul dimiliki bersama. Dengan demikian, kohesi mengukur kekuatan hubungan antara bagian-bagian fungsionalitas dalam modul yang diberikan. Misalnya, dalam fungsionalitas sistem yang sangat kohesif sangat terkait.
Kopel:
Itu juga pasangan banyak kelas yang tidak terkait bersama-sama karena mereka semua akhirnya merujuk file yang tidak benar-benar terkait dengan apa yang mereka lakukan.
Kopling ketat adalah ketika sekelompok kelas sangat tergantung satu sama lain. Skenario ini muncul ketika suatu kelas mengambil terlalu banyak tanggung jawab, atau ketika satu masalah tersebar di banyak kelas daripada memiliki kelasnya sendiri.
Jika Anda menggunakan nama yang lebih baik seperti DELIMITER = ','
Anda masih akan memiliki masalah yang sama, karena nama itu generik dan tidak membawa semantik. Menugaskan kembali nilai tidak lebih membantu melakukan analisis dampak daripada mencari dan mengganti literal ','
. Karena beberapa kode apa yang menggunakannya dan perlu ,
dan beberapa kode lain digunakan tetapi perlu ;
sekarang? Masih harus melihat setiap penggunaan secara manual dan mengubahnya.
Di alam liar:
Saya baru-baru ini refactored 1,000,000+ LOC
aplikasi yang berusia 18 tahun. Itu memiliki hal-hal seperti public static final COMMA = SPACE + "," + SPACE;
. Itu sama sekali tidak lebih baik dari sekadar " , "
menjelaskan di mana ia dibutuhkan.
Jika Anda ingin memperdebatkan keterbacaan, Anda perlu mempelajari Anda untuk mengonfigurasi IDE Anda untuk menampilkan whitespace
karakter di mana Anda dapat melihatnya atau apa pun, itu hanya alasan yang sangat malas untuk memasukkan entropi ke dalam sistem.
Itu juga telah ,
didefinisikan beberapa kali dengan beberapa salah eja kata COMMA
dalam beberapa paket dan kelas. Dengan referensi ke semua variasi yang dicampurkan bersama dalam kode. Itu bukan mimpi buruk untuk mencoba memperbaiki sesuatu tanpa merusak sesuatu yang sama sekali tidak berhubungan.
Sama dengan alfabet, ada beberapa UPPER_CASE_A
, A
, UPPER_A
, A_UPPER
yang sebagian besar waktu yang sama dengan A
namun dalam beberapa kasus tidak . Untuk hampir setiap karakter, tetapi tidak semua karakter.
Dan dari sejarah edit tidak tampak bahwa satu pun dari ini pernah diedit atau diubah selama 18 tahun, karena apa yang sekarang menjadi alasan jelas adalah terlalu banyak hal yang tidak dapat dilacak, sehingga Anda memiliki variabel baru nama yang menunjuk ke hal yang sama yang tidak pernah dapat diubah karena alasan yang sama.
Dalam kenyataan yang tidak waras, Anda dapat berargumen bahwa praktik ini tidak melakukan apa pun kecuali memulai dengan entropi maksimum.
Saya refactored semua kekacauan ini dan menggarisbawahi semua tautologi dan mempekerjakan perguruan tinggi baru jauh lebih produktif karena mereka tidak harus memburu melalui beberapa tingkat tipuan apa const
referensi ini sebenarnya menunjuk, karena mereka tidak dapat diandalkan dalam apa yang mereka sebut vs apa yang dikandungnya.