ダイジェスト。
さて、ここまで変数と関数の宣言と、変数をいじくる方法については述べた。
しかし、まともなコンピュータプログラムを書きたいならば、条件分岐と繰り返し処理は確実に必要である。
条件式を満たしているか否かによって、実行する命令(またはブロック)を変える処理。
if-elseif-else と、switch-case-defaultがある。(一般的にはif文、switch文と呼ばれる)
if文の例を示す。
#include<stdio.h>
#define MODE 0
int main(void)
{
int i = MODE;
if(i == 0)printf("mode 0;");
else if(i == 1)printf("mode 1");
else printf("unknown mode.");
return 0;
};
このように、else ifを使うことができる。else ifは何回でも重ねることができるが、後述するswitch文の方が適している場合がある。
なお、これはブロックを用いない方法である。
ブロックを用いると、
#include<stdio.h>
#define MODE 0
int main(void)
{
int i = MODE;
if(i == 0)
{
printf("mode 0;");
}
else if(i == 1)
{
printf("mode 1");
}
else
{
printf("unknown mode.");
}
return 0;
};
とも書ける。この二つは同意の処理である。しかし、後者の処理の場合はあくまでブロックを実行しているため、ブロックの中にある複数の命令を一気に実行できる。
次に、switch文。
#include<stdio.h>
#define MODE 0
int main(void)
{
int i = MODE;
switch (i)
{
case 0:
printf("mode 0.");
break;
case 1:
printf("mode 1.");
break;
default:
printf("unknown mode.");
}
return 0;
};
switch文は、if文よりも、多くのケースの処理を分けるのに適している方式である。
その代わり、分岐を判別するための変数は一つ限りで、条件式らしい条件を与えることもできない。
また、break文は必須である。breakしない場合、そのまますぐ下のケースの処理に入ってしまう。
しかしこれを利用することで、指定した複数のケースの時に同じ命令を実行させることもできる。
つまり以下のようにできる。
#include<stdio.h>
#define MODE 0
int main(void)
{
int i = MODE;
switch (i)
{
case 0:
case 1:
printf("known mode.");
break;
default:
printf("unknown mode.");
}
return 0;
};
これは、i == 0 および i == 1の時と、 それ以外の時とで分岐している。
繰り返し文はいくつかあるが、二つだけ紹介する。
whileとforである。
whileはもっとも単純な繰り返し処理で、与えた条件式が正しい(真の(trueの))時のみ繰り返し、そうでないときは繰り返さずに次の処理に移る。
以下は実行してはならない。
#include<stdio.h>
int main(void)
{
int i = 0;
while(1)
{
printf("hoge\r\n");
}
return 0;
};
while(1)とは、何があろうと永久にループし続けることを意味する。言語によってはwhile(true)ともいう。
そのため、危険だということに注意すべきだ。
では、これではどうだろうか。
#include<stdio.h>
int main(void)
{
int i = 0;
while(i < 10)
{
printf("hoge\r\n");
i++;
}
return 0;
};
無限ループではなくなった。
また、
#include<stdio.h>
int main(void)
{
int i = 0;
while(1)
{
printf("hoge\r\n");
i++;
if(i >= 10)break;
}
return 0;
};
これでも同様に動作する。
break文によって制御するのは、基本的に無限ループにしつつ、ある条件を満たしたときのみループを終えるという設計の際に有用である。
ゲームは基本的に、アップデート処理と描画処理を交互に行い、特定の動作をしない限り永久にそれを続けるため、breakによって制御する方式は分かりやすい。
無論、同じ処理をwhileの条件式にするのでもよい。好きな方法をとるといい。
次に、for文。
for文とは、ループ処理に入ろうとするときの処理と、ループするかどうかの条件式と、処理を終えて次のループへ入る直前の処理と、を与えて動く繰り返し文である。
#include<stdio.h>
int main(void)
{
for(int i = 0; i < 10; i++)
{
printf("hoge\r\n");
}
return 0;
};
前述のものと同じように動くのだが、随分とすっきりしたのがわかるだろうか。
なお、環境によってはint i を別に宣言する必要があるかもしれない。しかし、最近のコンパイラならばこのままで動くだろう。
このように、条件分岐と繰り返し文は幾通りかのやり方がある。
忘れないでほしいのは、これらはプログラム次第で相互に代替できるということだ。
ゆえに、使い分けは実はさほど重要ではない。
無論、使い分けられるならば読みやすいソースになるだろうが、趣味のプログラムならばあまり気にする必要はない。
参考までに、whileは無限ループのみで使い、他はできるだけforを使うという方式を提示しておく。個人によって最適解は異なるので、模索してほしい。
最終更新:2013年04月30日 12:01