自分だけの
「秘密の暗号」
日記帳に書いた「今日は8が起きた」という一文。
あなたには意味が分かるでしょう。
しかし、5年後のあなたや、それを読む他人は「8って何だ?」と永遠に悩み続けます。
- `if (status == 9)` というようなコードが至る所にある
- 「99はその他、0は未設定」など、独自の番号ルールがドキュメント化されていない
- 消費税率などの変動する値も、直接数字(1.10)で書いている
- 「この数字は何?」と聞かれて、即答できないものが3つ以上ある
呪文の意味を知る魔術師(あなた)がいなくなった瞬間、システムは修正不能になります。
01. 突然現れる「8」とか「3」
price = price * 0.9;
}
このコードを見て、「3」が何を表しているか分かりますか?
ゴールド会員? 社員? それともブラックリスト?
「0.9」も謎です。1割引? 税抜き計算?
このように、ソースコード内に直接書き込まれた意味不明な数字を「マジックナンバー(魔法の数字)」と呼びます。
プログラムは動きますが、読む人にとっては解読不能な暗号です。
それはコードへの「命」の吹き込みだ。
02. 変更時の地獄
もし「ユーザータイプ3」の意味が変わり、番号が「4」になったとします。
マジックナンバーで書いていると、プロジェクト内の数千ファイルから「3」という数字を検索し、
それが「ユーザータイプの3」なのか「個数の3」なのかを目視で判断して置換しなければなりません。
これはもはや、地雷撤去作業に近いストレスです。
間違いなく、いくつかの「3」は見逃され、いくつかの無関係な「3」が誤って書き換えられます。
03. 定数(Constant)を使う
解決策は簡単です。数字に名前をつける(定数化する)ことです。
`const USER_TYPE_VIP = 3;`
`const DISCOUNT_RATE = 0.9;`
こう定義しておけば、コードは `if (user.type == USER_TYPE_VIP)` となり、誰でも意味が理解できます。
もし値が変わっても、定数の定義を1箇所変えるだけで、全ての箇所の修正が完了します。
「名前をつける」というたった数秒の手間が、未来の数百時間を救うのです。