IFB文

本ページには広告が含まれています。

条件分岐をさせる構文で動作は基本的にIF文 と同じですが、IFBは複数の条件で分岐でき、処理も複数書くことができます。

ELSEIFは必要だけ記述することができ、ELSEIFELSEは必要がなければ省略することもできます。

構文
IF 式 [THEN]
[ELSEIF 式 [THEN]]
[ELSE]
ENDIF
引数
戻り値

IFB文とは

IFB文はIF文と同様、条件や値によって分岐する処理を書くことができます。IF文THEN節ELSE節に1文しか処理が書けなかったり単独の条件式での分岐しかできませんが、IFB文は複数の条件分岐を書くことができます。

フローチャート

IFB文をフローチャートで表すと以下のいずれかになります。

条件式Trueのときに処理を実行し、Falseのときに何も実行しないときは以下のようになります。

処理が1つの場合は、IF文で書き換えることができます。

UWSC
IFB 条件式 THEN
	処理
ENDIF
draw.io-IF文.drawio.png

条件式Trueのときに処理1を実行し、Falseのときに処理2を実行するときは以下のようになります。

処理1処理2がともに1つのときはIF文で書き換えることができます。

UWSC
IFB 条件式 THEN
	処理1
ELSE
	処理2
ENDIF
draw.io-IF文(ELSE).drawio.png

条件式1Trueのときに処理1を実行します。条件式1False条件式2Trueのときは処理2を実行します。条件式2Falseのときは何も実行しません。

ELSEIF節は条件の数に応じて必要な数だけ記述することができます。

UWSC
IFB 条件式1 THEN
	処理1
ELSEIF 条件式2 THEN
	処理2
ENDIF
draw.io-IF文(ELSEIF).drawio.png

条件式1Trueのときに処理1を実行します。条件式1False条件式2Trueのときは処理2を実行します。条件式2Falseのときは処理3実行します。

ELSEIF節は条件の数に応じて必要な数だけ記述することができます。

UWSC
IFB 条件式1 THEN
	処理1
ELSEIF 条件式2 THEN
	処理2
ELSE
	処理3
ENDIF
draw.io-IF文(ELSEIF・ELSE).drawio.png

IFB文で使える演算子

比較演算子

比較演算子とは2つの式や値を比較するための演算子で、2つの値が等しい等しくない大きい小さいといった比較ができるようになります。

比較演算子を使うことで、○○と一致したとき○○ではないときといった条件式を書くことができます。

UWSCで使える比較演算子は以下のとおりで、a,bはともに数値が代入されているものとします。

演算子 記述例 意味
< a < b aがbより小さければ真
<= a <= b aがb以下ならば真
> a > b aがbより大きければ真
>= a >= b aがb以上ならば真
= a = b aとbが等しければ真
<> <> b aとbが等しくなければ真

論理演算子

論理演算子とは、論理演算をするための演算子のことで、論理演算子を使うことで○○かつ○○○○または○○といった比較演算子だけではできない複数の条件式を比較するといった書き方ができるようになります。

以下の例ではa,bともに論理値(TrueまたはFalse)が代入されているものとします。数値の場合は論理演算ではなくビット演算になるので注意が必要です。

演算子 記述例 意味
AND a AND b aとbがともに真の場合に真
OR a OR b aかbの少なくとも1つが真の場合に真
XOR a XOR b aかbのいずれか一方が真の場合に真
! !x xが偽の場合に真

IFB文の書き方

以下は分岐させる条件が3つのときの処理の流れを表したものです。

UWSC
IFB 条件式1 THEN
	処理1
ELSEIF 条件式2 THEN
	処理2
ELSEIF 条件式3 THEN
	処理3
ELSE
	処理4
ENDIF

IFB文の処理の流れとしては、まず条件式1が成り立つ場合は処理1を実行。条件式1が成り立たず条件式2が成り立つ場合は処理2を実行。条件式2が成り立たず条件式3が成り立つ場合は処理3を実行。どの条件式にも一致しなかった場合はELSE節の処理が実行されます。条件式・処理は必要な数だけ記述することができ、ELSE節は必要がなければ省略することも可能です。

またどこかで条件式が一致した場合、それ以降の条件式の判定は行われません。最初に一致した箇所の処理が終わったらENDIFの直後まで処理が飛びます。

これをまとめると以下のようになります。

UWSC
IFB 条件式1 THEN
	条件式1が真のときの処理
ELSEIF 条件式2 THEN
	条件式1が偽で条件式2が真のときの処理
ELSEIF 条件式3 THEN
	条件式2が偽で条件式3が真のときの処理
ELSE
	いずれの条件式も満たさなかったときの処理
ENDIF

以下はscoreの値によって処理を分岐させるプログラムです。scoreの値が90以上ならAと出力します。score >= 90が成り立たなかったら次のELSEIFの条件式が成り立つか調べ80以上ならBscore >= 80が成り立たなかったら次のELSEIFの条件式が成り立つか調べ70以上ならCという風に上から順番に条件式が成り立つかどうかを調べていきます。条件式が成り立ち処理が実行された時点でENDIF直後まで処理が飛び、残りの条件式が成り立つがどうかの判定は行いません。

このプログラムの場合、5行目の条件式(score >= 80)が一致するのでBと出力されます。

UWSC
DIM score = 85

IF score >= 90 THEN
	PRINT "A"
ELSEIF score >= 80 THEN
	PRINT "B"
ELSEIF score >= 70 THEN
	PRINT "C"
ELSEIF score >= 60 THEN
	PRINT "D"
ELSE
	PRINT "E"
ENDIF
結果
プレーンテキスト
B

このプログラムをELSEIFを使わずに書くと以下のようになります。

UWSC
DIM score = 85

IFB score >= 90 THEN
	PRINT "A"
ELSE
	IFB score >= 80 THEN
		PRINT "B"
	ELSE
		IFB score >= 70 THEN
			PRINT "C"
		ELSE
			IFB score >= 60 THEN
				PRINT "D"
			ELSE
				PRINT "E"
			ENDIF
		ENDIF
	ENDIF
ENDIF

ELSEIF文はこれまでに書かれたすべての条件式が成り立たなかったときに実行される条件式なので、以下のようにこれまでに成り立たなかった条件式を改めて書く必要はありません。

5行目のscore >= 80 AND score < 90という条件式は3行目のscore >= 90が成り立たなかったときに実行される条件式なので、5行目に来る時点で90未満なのは確定しています。そのためAND score < 90は書く必要はありません。7行目、9行目のAND以降も同様の理由で必要ありません。

UWSC
DIM score = 85

IF score >= 90 THEN
	PRINT "A"
ELSEIF score >= 80 AND score < 90 THEN
	PRINT "B"
ELSEIF score >= 70 AND score < 80 THEN
	PRINT "C"
ELSEIF score >= 60 AND score < 70 THEN
	PRINT "D"
ELSE
	PRINT "E"
ENDIF

関連記事

IF文
IF文は条件によって処理を分岐させたいときに利用します。条件が成り立たないときの処理(偽)は省略することができます。処理が2文以上のときはIFB-ENDIFを使います。
SELECT文