if文
if文(イフぶん)はプログラミング言語において「もしXならば、Yせよ、さもなくばZせよ」というような条件実行を示す文である。if else文と呼ばれることもある。
具体的な構文はプログラミング言語によって異なるが、一般的に、真理値をとる条件式、条件式の値が真(true)の場合に実行されるthen節と呼ばれる文があり、値が偽(false)の場合に実行されるelse節と呼ばれる文が付く場合もある。
then節とelse節が式になるものを、条件演算子として実装している言語も多い。言語によってはifが文ではなく、条件演算子と同様の「if式」である言語もある。
構文
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個の文か、begin
~end
で囲まれる複文を書く。
真の時だけ実行するとき
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の場合
真の式だけ実行するとき
IF(条件式;真文;"")
真と偽で実行文を変えるとき
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 { 偽文 }
プログラム例
特に断りがない場合na
とnb
の大きい方を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))
)
と同様であるが、そもそもまともな神経を持っていれば、
(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コマンドが実行される)
言語によっては、このように論理積演算や論理和演算を擬似的なIf文として代用する場合が多々ある。