if文

出典: フリー百科事典『ウィキペディア(Wikipedia)』

if文(イフぶん)は、プログラミング言語において、真理値に従って「もしXならば、Yせよ、さもなくばZせよ」というような条件実行の「文 (プログラミング) 」で、制御構造のひとつである。if else文と呼ばれることもある。

具体的な構文はプログラミング言語によって異なるが一般的に、条件式と、条件式の評価結果の値が「真として扱うべき値」の場合に実行される「then節」と呼ばれる部分があり、「偽として扱うべき値」の場合に実行されるelse節と呼ばれる部分が付く場合もある。

then節とelse節が式になる「条件演算子」がある言語も多い。言語によってはifが文ではなく、条件演算子と同様の「if式」である言語もある。

真偽値[編集]

「真として(あるいは、偽として)扱うべき値」について詳説する。条件式の値が真理値をとるブーリアン型でなければならない言語もあるが、そのように限定していない言語もある。C言語にはそもそもブーリアン型が無くintで代用しているが、条件式としては汎整数型のゼロ(0)の他、ヌルポインタや 0.0 なども偽として扱われる。Rubyではnilとfalse以外は真として扱われる。JavaScriptにはtruthyとfalsyという用語があり、falseの他いくつかの値がfalsyで、その他の多くの値はtruthyである。比較的少数の偽になる値の他は、真、という言語が多いが、それと逆に、Dart言語(のproduction mode)のようにtrue以外は偽という言語もある(checked modeではbool以外の型だとエラー)。

構文と構文以外[編集]

以下ではいくつかの言語における、if文、乃至それに類似したものの、構文(syntax)と、構文以外のことについて述べる。

C[編集]

条件式は任意の式である(C99以前には真理値のみを扱うための型は無かった)。整数値0となる値は偽、他の値は真として扱われる。真を代表して表すための値は整数値1である。then節とelse節には、1個の文か、{ } で囲まれる複文を書く。

真の時だけ実行するとき

if (条件式)
 then節

真と偽の両方に振り分けるとき

if (条件式)
 then節
else
 else節

Lisp[編集]

Lispでは、ifは関数のような見掛けだが実引数が評価されない特殊形式(マクロ)である。真偽値は、nil という名前や中身の無いカッコ () で表現される空リストが偽として扱われ、他の値は真として扱われる。then節とelse節のどちらも式である。

真の時だけ実行するとき

(if 条件式 then節)

真と偽の両方に振り分けるとき

(if 条件式 then節 else節)

Lispにはcondという、同等の機能を実現できる特殊形式もある。仕様や実装によっては、ifがcondに展開されるマクロのこともあるし、condがifに展開されるマクロのこともある。

Pascal[編集]

then節とelse節には、1個の文か、beginend で囲まれる複文を書く。

真の時だけ実行するとき

if 条件式 then
 then

真と偽の両方に振り分けるとき

if 条件式 then
 then
else
 else

Ada[編集]

Adaでは条件式の型はBoolean(もしくはBooleanの派生型)でなければならない。これはJava等も同様である。

真の時だけ実行するとき

if 条件式 then
 then節
end if;

真と偽で実行文を変えるとき

if 条件式 then
 then節
else
 else節
end if;

Perlの場合[編集]

真の時だけ実行するとき

真文 if 条件文

偽の時だけ実行するとき

偽文 unless 条件文

また、C言語風の記述法も可能である。

真の時だけ実行するとき

if(条件文) {
 真文
}

真と偽で実行文を変えるとき

if(条件文) {
 真文
} else {
 偽文
}

Rubyの場合[編集]

Rubyのifは厳密に言えばif式であり、条件が成立した方の節で最後に評価された式の値を返す。

真の時だけ実行するとき

if 条件式 (then)
 真文
end

真と偽で実行文を変えるとき

if 条件文 (then)
 真文
else
 偽文
end

BASICの場合[編集]

真の時だけ実行するとき

IF 条件式 THEN 真文

真と偽で実行文を変えるとき

IF 条件式 THEN 真文 ELSE 偽文

真文・偽文が1行で書ききれない場合はgoto文が併用される。

Visual Basicの場合[編集]

真の時だけ実行するとき

If 条件式 Then
 真文
End If

真と偽で実行文を変えるとき

If 条件式 Then
 真文
Else
 偽文
End If

真文・偽文が短い場合には BASIC と同様の書き方も可能である。

REALbasicの場合[編集]

真の時だけ実行するとき

If 条件式 Then
 真文
End If

真と偽で実行文を変えるとき

If 条件式 Then
 真文
Else
 偽文
End If

OpenOffice.org Calc,Libre Office Calc, Excel の場合[編集]

真の式だけ実行するとき

IF(条件式;真文;"")

真と偽で実行文を変えるとき

IF(条件式;真文;偽文)

ただしLibre Office Calc, Office 365ではさらに条件を追加することができ

IFS(条件式1, 真の場合1, 条件式2, 真の場合2, ..., 条件式127, 真の場合127) (条件式は厳しいものから並べる必要がある。)

IF文の入れ子構造と処理は同一である。ただし可読性が良い。

FORTRAN[編集]

以下は、Fortran77以降の、論理IF文の場合である。1行のみの場合

if(条件式) 真文

複数行にまたがる場合

if(条件式1) then
  条件式1が真の場合ここから
  ここまでのプログラムが実行される(複数行)                                              
else if(条件式2) then                                               
  条件式2が真の場合ただしすでに条件式1が成り立っている場合は除くここから
  ここまでのプログラムが実行される(複数行)
else
  すべてのなかのいずれの条件にも当てはまらない場合ここから  
  ここまでのプログラムが実行される(複数行)
end if

Forthの場合[編集]

真の時だけ実行するとき

条件式 IF 真文 THEN

偽の時だけ実行するとき

条件式 NIF 偽文 THEN

真と偽で実行文を変えるとき

条件式 IF 真文 ELSE 偽文 THEN

または

条件式 NIF 偽文 ELSE 真文THEN

ひまわりの場合[編集]

真の時だけ実行するとき

もし、{条件式}ならば、(
{処理}
)

真と偽で実行文を変えるとき

もし、{条件式}ならば、(
{処理}
)
違ったら、(
{処理}
)

HSPの場合[編集]

真の時だけ実行するとき

if 条件式 : 真文

真と偽で実行文を変えるとき

if 条件式 : 真文 : else : 偽文

また、Cのようにブレイスを用いることもできる。

if 条件式 {
  真文
} else {
  偽文
}

プログラム例[編集]

特に断りがない場合nanbの大きい方をncに代入という意味である。

Cでの例[編集]

if(na > nb) {
  nc = na;
} else {
  nc = nb;
}
  • nc = (na > nb) ? na : nb としても同じ事ができる。

Common Lisp での例[編集]

(if (> na nb)
    (setq nc na)
    (setq nc nb))

これはcondを使った

(cond ((> na nb) (setq nc na))
      (t (setq nc nb)))

と同様であるが、Common Lispでは文ではなく式であるため返却値を利用し、

(setq nc (if (> na nb) na nb))

と書くこともできる。

Pascalでの例[編集]

if na > nb then nc := na else nc := nb

R言語での例[編集]

nc <- ifelse(na > nb, na, nb)

FORTRANの例[編集]

if(a.eq.b) c=5

上記の記述ではa=bの場合c=5になる簡単なプログラム例である。

if(a.eq.100) then
b=30
else if(a.eq.80) then
b=25
else
b=20
end if

上記の記述ではa=100の場合はb=30となり,a=80の場合はb=25,その他の場合はb=20となるプログラム例である。

論理積・論理和による擬似的なIf文[編集]

仮に && を論理積を表す演算子として、

左辺 && 右辺

という論理式で、左辺が真にならなければ右辺を評価しない言語(短絡評価)では、これを

If (左辺) { 右辺 }

と等価とみなすことができる。つまり左辺が条件文で、右辺が真文となるわけである。
同様に || を論理和を表す演算子だとすると、

左辺 || 右辺

If (Not 左辺) { 右辺 }

と等価となり、左辺が偽のときだけ右辺が実行される。

たとえばMS-DOSやWindowsのバッチファイルでは

CHDIR C:\HOGE || ECHO フォルダがみつかりません

(もしCHDIRコマンドが失敗したら、ECHOコマンドが実行される)

JavaScriptなど言語によっては、このように論理積演算や論理和演算を擬似的なIf文にできることがある。

関連項目[編集]