制御文を使いこなそう

JavaScriptを使って正男の機能を拡張しようとしたとき、条件文やループを使うことがよくあります。
本来ならば解説サイト等を見れば良いのですが、よく質問を受けるのでこちらでまとめます。


条件文って何?

条件文はある条件を指定し、それが成り立てばAを、そうでなければBをといったようなものです。


if文を使って条件分岐させよう

if文は以下のように記述します。

if ( 条件 ) {
	条件を満たしたときに実行したい処理
}

このように記述することで、()内の条件を満たしたとき{}内の処理が実行されます。
条件を満たしていない場合は何も実行されません。


else文を加える

条件を満たしていないときにしか実行しない処理を加えたいときはelseを加えます。それは以下の通りです。

if ( 条件 ) {
	条件を満たしたときに実行したい処理
}
else {
	条件を満たしていないときに実行したい処理
}

このように記述すれば良いです。elseのあとにifをつけてさらに細かい分岐にすることもできます。


ループって何?

ある処理を繰り返し実行するものです。


for文を使って一定回数繰り返す

for文は以下のように記述できます。

for(初期値設定; 継続条件; 再設定) {
	実行したい処理
}

少々分かりづらいと思うので、例を上げます。例えば10回繰り返したい場合は次のように記述します。

for(i=0;i<10;i++) {
	実行したい処理
}

繰り返しの条件を判定し、条件を満たしているなら{}内の処理を実行します。
条件を満たさない場合は実行されずループから外れます。


break文でループを打ち切る

break文を記述することでループを途中で打ち切ることができます。記述例は以下の通りです。

for(i=0;i<10;i++) {
	if( i == 2 ) break;

	実行したい処理
}

3回目のループで処理を打ち切ります。if文で一行だけ処理を実行したい場合は{}を省略することができます。


continue文でループをスキップする

continue文を記述することである回だけループ処理をスキップできます。記述例は以下の通りです。

for(i=0;i<10;i++) {
	if( i == 2 ) continue;

	実行したい処理
}

3回目のループのときだけ「実行したい処理」は実行されず4回目のループへと続きます。


ループをネストする

ループ中にループを入れることもできます。記述例は以下の通りです。

for(i=0;i<10;i++) {
	for(j=0;j<10;j++) {
		処理
	}
}

このときの動作を説明します。
まずはじめにi=0を初期値としたループ(以下外側のループ)が実行されます。
その中にj=0を初期値としたループ(以下内側のループ)が実行されます。
このループを10回繰り返したらi=1となり内側のループが実行されます。
外側のループ条件を満たさなくなるまで実行され計100回の処理が行われます。
breakやcontinueを内側のループに記述した場合は外側のループが打ち切られたり、スキップされます。
ラベルというものを使えば、内側のループを打ち切ったりスキップできます。ラベルの使用例は以下の通りです。

label_1: for(i=0;i<10;i++) {
		label_2: for(j=0;j<10;j++) {
			if(j == 2) continue label_2;

			if(j == 6) break label_1;
		}
}

内側ループ3回目で内側ループをスキップし、内側ループ7回目で外側ループを打ち切り、全体のループを終了します。


while文を使ってループさせる

for文とは違い、条件が成立するまでループします。

while (条件) {
	実行したい処理
}

何回ループするか分からない場合はこちらを使います。指定した条件を満たしている場合は{}内が実行されます。
ただしこの条件を満たしたままにしておき、条件から外れる記述が無い場合は無限ループとなってしまいます。
ちなみにこのように記述したものは、条件を満たさなければ一度も処理が実行されません。
以下に記述する例は条件の判定は{}内の処理を実行した後なので、必ず1回は実行されます。

do {
	実行したい処理
}while(条件);

最後に「;」がついていることに注意してください。必ず記述してください。


switch文で多方向分岐する

ある値を渡し、多方向に処理を分岐することができます。記述例は以下の通りです。

switch(変数) {
	case 値: 実行したい処理
	break;

	…

	default : 実行したい処理
}

変数に値が渡されるとその変数のラベルの処理を実行します。最後にbreakで終わります。
渡された変数と同じラベルが無い場合はdefaultが実行されます。
breakを記述しない場合は次のラベルの処理も実行されます。わざとこのように行っているプログラムもあります。
慣れないうちはbreakを記述したほうが好ましいです。
文字列をラベルにする場合は値のところを"文字"とします。