if文 2015/03/20
各プログラミング言語での、if文の書き方。
まとめ 2014/05/19
else if
の書き方
else if
派: C言語, C++, Go言語, Java, Scala, PHP(elseif
も可), JavaScript, CoffeeScript
elseif
派: Smarty
elsif
派: Ruby, Perl
elif
派: Python, sh
C言語, C++ 2013/10/31
if (...) {
...;
} else if (...) {
...;
} else {
...;
}
本体の文が1つだけの場合は {}
を省略可。
if (...)
...;
else
...;
else
で実行する文がなければ、else
節を省略可。
Go言語 2015/09/26
if ... {
...
} else if ... {
...
} else {
...
}
本体の文が1つだけの場合でも {}
を省略不可。
else
で実行する文がなければ、else
節を省略可。
条件を書くの部分にセミコロンで区切って変数初期化の文を書くことができる。
if a := f(); a < 0 {
return 0
} else {
return a
}
行末の {
は次の行に折り返してはいけない。次の行にしてしまうと、前の行に自動でセミコロンが挿入されて、意図した動作にならないかもしれない。
If statements | The Go Programming Language Specification
http://golang-jp.org/ref/spec#If_statements
Java 2014/10/12
if (...) {
...;
} else if (...) {
...;
} else {
...;
}
本体の文が1つだけの場合はC言語と同様に {}
を省略可。
if (...)
...;
else
...;
else
で実行する文がなければ、else
節を省略可。
条件式の部分は他の多くの言語と違い論理値への自動変換はされないので、
boolean
型でないとコンパイルエラーが発生する。これは a == b
のつもりで間違って a = b
と書いてしまってもほとんどの場合はコンパイルエラーになってくれるので、実行時にバグとなることを防ぐことができる。
(a
や b
がboolean
型だと、代入文を書いてしまってもコンパイルエラーにはなってくれない。この点はScalaに劣る。)
Scalaのようにif
文自体が値を返すことはできない。
The if
Statement | Java Language Specification
http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.9
Scala 2016/07/11
if (...) {
...;
} else if (...) {
...;
} else {
...;
}
本体の文が1つだけの場合はC言語と同様に {}
を省略可。
if (...)
...;
else
...;
条件式の部分は他の多くの言語と違い論理値への自動変換はされないので、
Boolean
型でないとコンパイルエラーが発生する。これはJavaと同様であり、これは a == b
のつもりで間違って a = b
と書いてしまってもコンパイルエラーになってくれるので、実行時にバグとなることを防ぐことができる。
(a
や b
がBoolean
であっても a = b
はUnit
型になるので、
Javaと違い、間違って代入文を書くと必ずコンパイルエラーになる。)
Scalaではif
は式であり、結果を返すことができるので以下のように
三項演算子の代わりとしても使える。
val max = if(a > b) a else b;
if
式の返り値を変数に代入することもできる。
val a = if (...) {
...;
} else {
...;
}
if
式にメソッド呼び出しをつなげることもできるが、このときは全体を括弧で囲む必要がある。
(if (...) {
...;
} else {
...;
}).foomethod(...);
PHP 2014/04/26
if (...) {
...;
} else if (...) {
...;
} else {
...;
}
else if
はつなげて elseif
でも可。
本体の文が1つだけの場合はC言語と同様に {}
を省略可。
if (...)
...;
else
...;
コロンを使った以下の記法も可能。コロンを使った場合は else if
はコンパイルエラーになり、
elseif
とすることが必要。
if (...):
...;
elseif (...):
...;
else:
...;
endif;
いずれの構文でも else
で実行する文がなければ、else
を省略可。
Smarty 2013/08/30
{if ...}
...
{elseif}
...
{else}
...
{/if}
Python 2014/07/31
if ...:
...
elif ...:
...
else:
...
書くべきステートメントが1つもない場合になにも書かないと文法エラーになってしまうが、
pass
というステートメントを書くと、なにもしないということを明示できてエラーにもならない。
if ...:
pass
else:
...
if
文 | Python 2.7 documentation
http://docs.python.jp/2/reference/compound_stmts.html#if
if
文 | Python 3 documentation
http://docs.python.jp/3/reference/compound_stmts.html#the-if-statement
if
を以下のように書くと結果を返すことができるので、
三項演算子のように使える。この if
をPythonでは条件演算子という。
max = a if a > b else b
条件演算子 | Python 2.7 documentation
http://docs.python.jp/2/reference/expressions.html#conditional-expressions
条件演算子 | Python 3 documentation
http://docs.python.jp/3/reference/expressions.html#conditional-expressions
Ruby / JRuby 2015/02/17
例
if ...
...
elsif ...
...
else
...
end
以下のように then
を付けてもよいが、普通は省略する。
if ... then
...
elsif ... then
...
else
...
end
1行で全部を書きたい場合は then
が必須になる。
if ... then ... else ... end
else
で実行する文がなければ、else
節を省略可。
else
節がなく、本体の文が1つだけの場合は以下のように修飾子の構文での書き方も可能。この書き方は end
を書く必要がなく行数が短くて済むため読みやすい場合が多い。
... if ...
if
の反対で条件が満たされなかった場合にのみ実行する unless
もある。
unless ...
...
end
やはり修飾子の書き方も可能。
... unless ...
unless
にもelse
節を付けられるがわかりづらいので使わないほうがよい。
elsunless
というのはない。
RubyではScalaと同じく if
は結果を返すことができるので、以下のように三項演算子の代わりとしても使える。ただし、ネストしていないなどシンプルな構造の場合は素直に三項演算子のほうがわかりやすい。
max = if a > b
a
else
b
end
Perl 2014/12/30
例
if (...) {
...;
} elsif (...) {
...;
} else {
...;
}
本体の文が1つだけの場合でも {}
で囲むことが必要で、C言語やJavaなどのように
{}
の省略ができない。
else
で実行する文がなければ、else
節を省略可。
else
節がなく、本体の文が1つだけの場合は以下の修飾子の構文での書き方も可能。
... if ...;
if
の反対で条件が満たされなかった場合にのみ実行する unless
もある。
unless (...) {
...;
}
やはり修飾子の書き方も可能。
... unless ...;
unless
にもelse
節を付けられるがわかりづらいので使わないほうがよい。
elsunless
というのはない。
sh (シェルスクリプト) 2015/03/20
if ...; then
...
elif ...; then
...
else
...
fi
条件式の部分には普通のコマンドを書くことができて、コマンドが正常終了したら(終了コード0を返したら)条件成立の扱いになって、then
以下が実行される。異常終了したら(0以外の終了コードを返したら)、else
以下が実行される。
たいていのコマンドは何らかのエラーが発生すると、異常終了するようになっているので、シェルスクリプトのif
文は、コマンドが正常終了したらなにかを実行する、という意味になる。
diff
コマンドのように、エラーかどうかではなく、処理結果に応じて終了コードが変わるものもあるので、そういうのもif
文との相性がよい。
else
で実行する文がなければ、else
節を省略可。
then
の中や else
の中にコマンドがひとつもないと
bashであれば syntax error near unexpected token
fi’、
Ubuntuに入っているデフォルトのsh(dash)であれば
Syntax error: “fi” unexpected` というようなエラーが発生してしまう。
zshでは空でも大丈夫みたい。
空ではエラーになってしまうけど、空のままにしておきたい事情があれば、なにもしないコマンド :
を書いておけばよい。
if ...; then
:
fi
他の言語にあるような unless
を使いたくなった場合は、条件としておくコマンドの前に否定の !
を置くとよい。
if ! ...; then
...
fi
test
コマンド([
)でも !
は否定の意味で使われる。
then
は次の行に書くスタイルでもよくて、その場合は条件の最後のセミコロンが不要になる。
if ...
then
...
elif ...
then
...
else
...
fi
これらif
文の話はsh系(bash等)の場合で、cshではif
文の構文からして違うらしい。
JavaScript 2013/09/07
例
if (...) {
...;
} else if (...) {
...;
} else {
...;
}
本体の文が1つだけの場合は {}
を省略可。
if (...)
...;
else
...;
いずれの構文でも else
で実行する文がなければ、else
を省略可。
CoffeeScript 2013/09/07
if ...
...
else if ...
...
else
...
または単一行で書く場合
if ... then ... else ...
elseだけを1行にまとめることができる。
if ...
...
else if ...
...
else ...
3項演算子としても使える。
a = if ... then ... else ...
Rubyのように修飾子の構文でも使える。
alert "hoge" if condition