マジックナンバーとは定数の数値そのもののこと。100,255とか。直接プログラムコード中に数値が書かれていると、それが何を意味するか分かりにくい。また、その数値がコード中にいろんな箇所に散らばっていると修正するとき大変。
ということで、マジックナンバーはシンボリック定数に置き換える。
if (power < 255) { ... }
は次のような感じ。
static final int MAX_POWER = 255; if (power < MAX_POWER) { ... }
たとえば、敵キャラの行動を番号で指定するような処理があった場合。
public class Enemy { public void exec(int action) { if (action == 0) { // 攻撃 } else if (action == 1) { // 防御 } else if (action == 2) { // 逃走 } else { // 未対応 } } }
これはenumを使って次のように書き換えられる。
public class Enemy { public enum Action { ATTACK, DEFENCE, RUNAWAY, }; public void exec(Enemy.Action action) { if (action == Action.ATTACK) { // 攻撃 } else if (action == Action.DEFENCE) { // 防御 } else if (action == Action.RUNAWAY) { // 逃走 } else { // 未対応 } }