IF文

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

IF文とは条件分岐をさせる構文で、条件が成り立つときと成り立たないときで異なる処理を実行することができます。

処理が1行の場合(真は必須)はIF文を、2行以上の処理を書くときはIFB文を使います。

マルチステートメント で複数行を1行にして書くのも禁止です。

構文
IF 式 THEN 真 [ELSE 偽]
引数
戻り値

IF文とは

IF文は条件や値によって処理を分岐させ、一致するときとしないときの処理を分けることができます。条件が一致することを「真(True)」、条件が一致しないことを「偽(False)」といいます。

IF文の条件式は真偽値で判定され、真のときにはTHEN節 、偽のときにはELSE節が実行されます。条件が数値の場合、真偽値は0False0以外がTrueと判定されます。

数値が真偽値でTrueになるのかFalseになるのかがわからない場合、VARTYPE関数 (スクリプト関数)で型変換を行うことで調べることができます。

UWSC
PRINT VARTYPE(真偽値を調べる値, VAR_BOOLEAN)

例えば10の真偽値を調べる場合は以下のようになります。

UWSC
PRINT VARTYPE(10, VAR_BOOLEAN)
結果
プレーンテキスト
True

以上の結果から10Trueを返すことがわかります。

フローチャート

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

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

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

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

UWSC
IF 条件式 THEN 処理1 ELSE 処理2

IF文で使える演算子

比較演算子

比較演算子とは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が等しくなければ真
比較演算子の使い方

比較演算子は2つの式を比較した結果を論理値で返します。式が成り立つ場合はTrue、成り立たない場合はFalseを返します。

以下はa5b10を代入し、その2値を比較演算子で比較した結果を出力します。

a < bは値を代入すると5 < 10となりこの式は成り立つので、Trueを返します。

UWSC
DIM a = 5
DIM b = 10

PRINT a < b
結果
プレーンテキスト
True

次にabの値はそのまま、演算子だけ変えたプログラム。a >= bは値を代入すると5 >= 10となりこの式は成り立たないため、Falseを返します。

UWSC
DIM a = 5
DIM b = 10

PRINT a >= b
結果
プレーンテキスト
False

比較演算子はこのように比較した結果によってTrueFalseを返す演算子です。

論理演算子

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

以下の例では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が偽の場合に真
論理演算子の使い方

比較演算子では○○より大きいいったと式を書くことができましたが、論理演算子を使うと○○より大きい、かつ○○より小さいといった複数の条件を書くことができます。

以下のプログラムはa10以上かつ20未満が成り立ちTrueを返します。

UWSC
DIM a = 15

PRINT a >= 10 AND a < 20
結果
プレーンテキスト
True

処理の流れとしては、aの値をa >= 10 AND a < 20に代入して15 >= 10 AND 15 < 20、比較演算子を評価してTrue AND True、論理値の比較でTrueとなります。

処理の順番には決まりがあるので、演算子の優先順位を参考にしてください。

次に、以下のプログラムはa10以上かつ20未満が成り立たないのでFalseを返します。

UWSC
DIM a = 30

PRINT a >= 10 AND a < 20
結果
プレーンテキスト
False

処理の流れとしては、aの値をa >= 10 AND a < 20に代入して30 >= 10 AND 30 < 20、比較演算子を評価してTrue AND False、論理値の比較でFalseとなります。

IF文の書き方

これまでに出てきた比較演算子・論理演算子を使ってIFTHENの間に条件式、THENの後ろに条件式が成り立ったときの処理を書きます。THENより後ろのの部分をTHEN節といいIF文で書ける処理は1行だけです。2行以上記述する場合は、IFB文を使います。

以下のプログラムは、条件式が成り立ちTrueを返すのでTHEN節が実行されます。

UWSC
DIM a = 5
DIM b = 10

IF a < b THEN PRINT "aはbより小さいです。"
結果
プレーンテキスト
aはbより小さいです。

条件式が成り立たなかったときは何も出力されません。

UWSC
DIM a = 10
DIM b = 5

IF a < b THEN PRINT "aはbより小さいです。"

条件式が成り立たなかったときはTHEN節の後ろにELSEを書き、続いて処理を記述します。THEN節と同様にELSEより後ろのの部分をELSE節といいます。

UWSC
DIM a = 10
DIM b = 5

IF a < b THEN PRINT "aはbより小さいです。" ELSE PRINT "aはbより小さくありません。"
結果
プレーンテキスト
aはbより小さくありません。

ELSE節を記述すると1行でもIF文だとかなり見づらくなるので、IFB文を使って書くことをおすすめします。

UWSC
DIM a = 10
DIM b = 5

IFB a < b THEN
	PRINT "aはbより小さいです。"
ELSE
	PRINT "aはbより小さくありません。"
ENDIF
結果
プレーンテキスト
aはbより小さくありません。

記述例

変数は左辺に書く

数値と変数を比較するときは、変数を左辺に持ってくる。

以下の例だと上はnが10以上ならばだが、下は10がn以下ならばというニュアンスになり読みづらいしわかりにくい。

UWSC
IF n >= 10 THEN
UWSC
IF 10 <= n THEN

ちなみに、条件式の左辺に数値を持ってくる書き方をヨーダ記法というそうです。

条件が複数あるときは入れ子にし過ぎない

条件が複数あるときはIF文を入れ子にせず、論理演算子(ANDOR)を使い条件を横並びに書く。

UWSC
IF score >= 50 AND score < 60 THEN
	PRINT "50以上60未満です。"
ENDIF
UWSC
IFB score >= 50 THEN
	IFB score < 60 THEN
		PRINT "50以上60未満です。"
	ENDIF
ENDIF
数値が範囲内にあるか

数値が指定した範囲内にあるかどうか調べるには、ANDで条件式を並べます。

UWSC
IFB n >= 10 AND n < 20 THEN
	PRINT "10以上20未満です。"
ENDIF

以下のように関係演算子を複数並べた書き方はできません。

UWSC
IFB 10 <= n < 20 THEN
	PRINT "10以上20未満です。"
ENDIF

演算子を使わない書き方

数値を返す関数の場合、演算子を省略することもできます。

以下の例だとstrabcが含まれていなければ0、含まれていればその位置を(1以上の)数値で返すのでその結果で条件分岐ができます。

UWSC
IF POS("abc", str) THEN

以下はabcがないとき真。

UWSC
IFB POS("abc", str) = 0 THEN
	PRINT "見つかりませんでした。"
ENDIF

以下はabcがあるとき真。

UWSC
IFB POS("abc", str) <> 0 THEN
	PRINT "見つかりました。"
ENDIF

真偽値を返す場合、TRUE・FALSEを省略可能

ブール型を返す関数の場合、わざわざTRUEFALSEと比較する必要はないです。

以下は画像が見つかったとき真。

UWSC
IFB CHKIMG("image.bmp") THEN
	PRINT "画像が見つかりました。"
ENDIF

真偽値を省略しない場合。

UWSC
IFB CHKIMG("image.bmp") = TRUE THEN
	PRINT "画像が見つかりました。"
ENDIF

否定のときは!(エクスクラメーションマーク)をつけます。

以下は画像が見つからなかったとき真。

UWSC
IFB !CHKIMG("image.bmg") THEN
	PRINT "画像が見つかりません。"
ENDIF

真偽値を省略しない場合。

UWSC
IFB CHKIMG("image.bmp") = FALSE THEN
	PRINT "画像が見つかりませんでした。"
ENDIF

関連記事

IFB文
条件分岐をさせる構文で動作は基本的にIFと同じですが、IFBは複数の条件で分岐でき、処理も複数書くことができます。ELSEIFは必要だけ記述することができ、ELSEIF・ELSEは必要がなければ省略することもできます。
SELECT文