IF文

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

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

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

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

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

IF文とは

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

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

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

UWSC

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

UWSC
結果
プレーンテキスト

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

フローチャート

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

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

UWSC
draw.io-IF文.drawio

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

UWSC
draw.io-IF文(ELSE).drawio

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を返します。

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

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

UWSC
結果
プレーンテキスト

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

UWSC
結果
プレーンテキスト

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

論理演算子

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

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

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

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

UWSC
結果
プレーンテキスト

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

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

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

UWSC
結果
プレーンテキスト

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

IF文の書き方

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

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

UWSC
結果
プレーンテキスト

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

UWSC

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

UWSC
結果
プレーンテキスト

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

UWSC
結果
プレーンテキスト

記述例

変数は左辺に書く

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

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

UWSC
UWSC

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

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

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

UWSC
UWSC
数値が範囲内にあるか

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

UWSC

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

UWSC

演算子を使わない書き方

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

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

UWSC

以下はabcがないとき真。

UWSC

以下はabcがあるとき真。

UWSC

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

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

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

UWSC

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

UWSC

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

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

UWSC

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

UWSC

関連記事

IFB文
IFB-ENDIF文は条件によって処理を分岐させたいときに利用します。ELSEIF文で条件、処理を複数書くことができます。処理が1文のときはIF文でも書くことができます。
SELECT文
値を複数条件で比較し条件が一致したところの処理を実行する。