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

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

制御フラグをなくす

制御フラグってのは処理の流れを制御するフラグのこと。たとえば、次のようなコード。

int data[MAX];
int target;

bool found = false;
for(int i=0; i<MAX && !found; i++) {
    if ( data[i] == target ) {
        found = true;
    }
}

int型の配列dataにtargetという値があるかどうか調べるもの。foundに結果が入る。このfoundが制御フラグ。検索のためのループを抜ける条件になっている。
ここで次のように見つかったときにbreakでループを抜けるようにすれば、フラグはループの条件から外すことが出来る。

bool found = false;
for(int i=0; i<MAX; i++) {
    if ( data[i] == target ) {
        found = true;
        break;
    }
}

さらにこの見つけるという処理を関数にしてしまえばフラグそのものをなくすことができる。

bool find(int* data, int max, int target) {
    for(int i=0; i<max; i++) {
        if (data[i] == target) {
            return true;
        }
    }
    return false;
}

こうすればシンプルで分かりやすい。