IF

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

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

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

条件判定について

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

条件式の書き方

条件式は比較演算子または論理演算子を使って書きます。

以下の例では変数a,bともに数値が代入されているものとします。

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

以下の例では変数a,bともに論理値(TrueまたはFalse)が代入されているものとします。

演算子 記述例 意味
AND IF a AND b THEN aとbがTrueのとき真
OR IF a OR b THEN aまたはbのいずれかもしくは両方がTrueのとき真
XOR IF a XOR b THEN aまたはbのいずれか一方がTrueのとき真

演算子の左辺・右辺が数値の場合、論理演算ではなくビット演算になるので注意。

変数は左辺に書く

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

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

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

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

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

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

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

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

この場合は変数を右辺に書いた方が読みやすい。

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

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

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

演算子を使わない書き方

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

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

IF POS("abc", str) THEN

以下は「abc」がないとき真。

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

以下は「abc」があるとき真。

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

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

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

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

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

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

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

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

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

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

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

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