If文

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

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

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

1. 真偽値
------

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

2. 構文と構文以外
----------

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

2.1. C
------

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

真の時だけ実行するとき if  then節 真と偽の両方に振り分けるとき if  then節 else else節

2.2. Lisp
---------

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

真の時だけ実行するとき  真と偽の両方に振り分けるとき 

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

2.3. Pascal
-----------

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

真の時だけ実行するとき if 条件式 then then節 真と偽の両方に振り分けるとき if 条件式 then then節 else else節

2.4. Ada
--------

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

真の時だけ実行するとき if 条件式 then then節 end if; 真と偽で実行文を変えるとき if 条件式 then then節 else else節 end if;

2.5. Perlの場合
------------

真の時だけ実行するとき 真文 if 条件文 偽の時だけ実行するとき 偽文 unless 条件文 また、C言語風の記述法も可能である。

真の時だけ実行するとき if { 真文 } 真と偽で実行文を変えるとき if { 真文 } else { 偽文 }

2.6. Rubyの場合
------------

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

真の時だけ実行するとき if 条件式  真文 end

真と偽で実行文を変えるとき if 条件文  真文 else 偽文 end

2.7. BASICの場合
-------------

真の時だけ実行するとき IF 条件式 THEN 真文

真と偽で実行文を変えるとき IF 条件式 THEN 真文 ELSE 偽文

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

2.8. Visual Basicの場合
--------------------

真の時だけ実行するとき If 条件式 Then 真文 End If

真と偽で実行文を変えるとき If 条件式 Then 真文 Else 偽文 End If

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

2.9. REALbasicの場合
-----------------

真の時だけ実行するとき If 条件式 Then 真文 End If

真と偽で実行文を変えるとき If 条件式 Then 真文 Else 偽文 End If

2.10. OpenOffice.org Calc,Libre Office Calc, Excel の場合
------------------------------------------------------

真の式だけ実行するとき IF

真と偽で実行文を変えるとき IF ただしLibre Office Calc, Office 365ではさらに条件を追加することができ IFS　 IF文の入れ子構造と処理は同一である。ただし可読性が良い。

2.11. FORTRAN
-------------

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

複数行にまたがる場合

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

2.12. Forthの場合
--------------

真の時だけ実行するとき 条件式 IF 真文 THEN

偽の時だけ実行するとき 条件式 NIF 偽文 THEN

真と偽で実行文を変えるとき 条件式 IF 真文 ELSE 偽文 THEN

または 条件式 NIF 偽文 ELSE 真文THEN

2.13. ひまわりの場合
-------------

真の時だけ実行するとき もし、{条件式}ならば、

真と偽で実行文を変えるとき もし、{条件式}ならば、 違ったら、

2.14. HSPの場合
------------

真の時だけ実行するとき if 条件式 : 真文

真と偽で実行文を変えるとき if 条件式 : 真文 : else : 偽文

また、Cのようにブレイスを用いることもできる。 if 条件式 { 真文 } else { 偽文 }

3. プログラム例
---------

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

3.1. Cでの例
---------

if { nc = na; } else { nc = nb; }

nc =  ? na : nb としても同じ事ができる。

3.2. Common Lisp での例
--------------------

  ) これはcondを使った  ) )) と同様であるが、Common Lispでは文ではなく式であるため返却値を利用し、  na nb)) と書くこともできる。

3.3. Pascalでの例
--------------

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

3.4. R言語での例
-----------

3.5. FORTRANの例
--------------

if c=5

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

if then b=30 else if then b=25 else b=20 end if

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

4. 論理積・論理和による擬似的なIf文
--------------------

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

左辺 && 右辺

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

If  { 右辺 }

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

左辺 || 右辺

は

If  { 右辺 }

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

たとえばMS-DOSやWindowsのバッチファイルでは
CHDIR C:\HOGE || ECHO フォルダがみつかりません

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

5. 関連項目
-------

論理包含
分岐命令 - 機械語
制御構造
ヨーダ記法 - If文内の条件式で定数を左辺に置くプログラミングスタイル