2-6.条件分岐

状況に応じて流れを変える


条件分岐とか何かプログラミングっぽくて良いですよね(何がだ)。

条件分岐をするには、if命令を使用します。

	if expression : statement

expression : 条件式
statement : 条件式を満たしていた場合に実行される命令

if命令は、条件式を満たしていればそれ以降(例なら":"の後)の命令を、満たしていなければ次の行から実行を開始します。

この条件式は、普通の式と同じように書きます。ただしこの時、比較演算子という演算子を使います。主な比較演算子は以下の通りです。

C言語やJavaでは"="を"=="、"!"を"!="と書きますが、それらの書き方でもOKです。

また、else命令を使うと、条件を満たさなかった場合の処理を書くことが出来ます。


	a = 5	;aの値を変えると変化が出ます。
	if a < 10 : mes "aは10より小さいそうな" : else : mes "aは10より大きいそうな"

この例だと、aの値が10より小さければaは10より小さいそうなと、それを満たさない、つまりaが10より大きければaは10より大きいそうなと表示されます。

また、goto命令を使って、ある条件を満たした場合に別のラベルへ飛ぶ、といった事も可能です。やり方としては、先ほどの例で行くとmes命令の代わりにgoto命令を書けば良いだけです。


	a = 5	;aの値を変えると変化が出ます。
	if a < 10 : goto *labelA : else : goto *labelB

*labelA
	mes "aは10より小さいそうな"
	stop

*labelB
	mes "aは10より大きいそうな"
	stop

(やっていることはさっきの例と同じです。あと各ラベルの終わりにstop命令を入れるのを忘れないで下さい)

また、複数行に渡る記述も可能です。あんまり長くなってきたら、もしくは長くなるかもしれない、という場合は、複数行にしておくことをお勧めします。


	a = 5
	if a = 4 {
		mes "aは4だそうな"
	} else {
		mes "aは4ではないそうな"
		mes "というかどうして「そうな」が付くのか僕も分かりません。"
	}

ちょっと例を変えてみました。このように書くことも可能です。ここで注意ですが、elseの後に改行を入れてはいけません。エラーになります。


	a = 5
	if a = 4 {
		mes "悪い例"
	}
	else
	{
		mes "これではエラーになります。"
	}

要するに、ifなら条件式の直後、elseなら命令の直後に"{"を入れなければならないということです。

これを次の章・節で説明することと組み合わせると、ユーザーの操作に応じて動作するプログラムが作れます。

そんなわけで次の節へ。次はボタンを使って簡単な「ユーザーの操作に反応して動く」ものについてです。

おまけ:『条件式の無いif文』
サンプルスクリプトを見ていると、時折変数名だけが書かれた(if variable : mes "何か"――こんな感じの)if文に出会うことがあります。最初に見たときは僕も一体どういう意味なのか分かりませんでした。これはifという命令が何をしているのかを知ることで理解できます。HSPのヘルプでifを見るとp1の条件式が満たされていれば、それ以降の命令を実行する。満たされていない場合は、次の行に移ります。と書かれています。しかし、実際には0かそれ以外かを見ています。条件式は、それを満たすと1になり、そうでないなら0になります。イコール条件式を満たされているかそうでないか、ととれるわけです。変数に入る値が0か1である場合に使うことが出来ます。ちなみに、ファイルサイズが数バイト減ります。使うか使わないかは皆さん次第ですが、僕はあまり使いませんねぇ……。


    a = 0
    if a : mes "aは0以外みたい" : else : mes "aは0らしいよ"

条件式が返す値ですが、こんな風にして見られます。


	a = 5
	mes a = 5
	mes a < 5
	mes a > 5
	mes a <= 6

Last Modified: 2008-08-15