Ini adalah topik yang agak kontroversial, dan saya kira ada banyak pendapat karena ada programmer. Tetapi demi itu, saya ingin tahu apa praktik umum dalam bisnis (atau di tempat kerja Anda).
Di tempat kerja saya, kami memiliki pedoman pengkodean yang ketat. Satu bagian dari itu didedikasikan untuk string / angka ajaib. Ini menyatakan (untuk C #):
Jangan gunakan nilai literal, baik numerik atau string, dalam kode Anda selain untuk mendefinisikan konstanta simbolik. Gunakan pola berikut untuk mendefinisikan konstanta:
public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; }
Ada pengecualian: nilai 0, 1 dan nol hampir selalu dapat digunakan dengan aman. Sangat sering nilai 2 dan -1 juga OK. String yang dimaksudkan untuk logging atau tracing dikecualikan dari aturan ini. Literal diizinkan ketika maknanya jelas dari konteksnya, dan tidak tunduk pada perubahan di masa depan.
mean = (a + b) / 2; // okay
WaitMilliseconds(waitTimeInSeconds * 1000); // clear enough
Situasi yang ideal adalah beberapa makalah penelitian resmi yang menunjukkan efek pada keterbacaan / pemeliharaan kode ketika:
- Angka ajaib / senar ada di semua tempat
- String / angka ajaib digantikan oleh deklarasi konstan secara wajar (atau dalam berbagai tingkat cakupan) - dan tolong jangan meneriaki saya karena menggunakan "cukup", saya tahu semua orang memiliki ide yang berbeda apa "cukup" itu
- String / angka ajaib ditempatkan secara berlebihan dan di tempat-tempat di mana mereka tidak harus (lihat contoh saya di bawah)
Saya ingin melakukan ini untuk memiliki beberapa argumen berbasis ilmiah ketika berdebat dengan salah satu kolega saya, yang akan sampai pada titik menyatakan konstanta seperti:
private const char SemiColon = ';';
private const char Space = ' ';
private const int NumberTen = 10;
Contoh lain adalah (dan ini dalam JavaScript):
var someNumericDisplay = new NumericDisplay("#Div_ID_Here");
Apakah Anda menempelkan DOM ID di atas file javascript Anda jika ID itu hanya digunakan di 1 tempat?
Saya telah membaca topik-topik berikut:
StackExchange
StackOverflow
Bytes Komunitas TI
Ada banyak lagi artikel, dan setelah membaca beberapa pola ini muncul.
Jadi pertanyaan saya adalah harus menggunakan string dan angka ajaib dalam kode kita? Saya secara khusus mencari jawaban ahli yang didukung oleh referensi jika memungkinkan.
NumberTen = 10
Itu tidak ada gunanya karena angka 10 tidak akan didefinisikan ulang. MaxRetryCount = 10
Itu ada titik a kita mungkin ingin mengubah jumlah coba lagi maks. private const char SemiColon = ';';
Bodoh. private const char LineTerminator = ';'
; Pintar.