ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

マジックナンバーは使うな

マジックナンバーとは定数の数値そのもののこと。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 {
            // 未対応
        }
    }


参考文献:『Java言語で学ぶリファクタリング入門』