三項演算子

C言語などでは a ? b : c と書けば、「もしaならb、そうでなければc」という意味になる。

単項演算子はパラメータが1つの演算子、二項演算子はパラメータが3つの演算子で、三項演算子はパラメータが3つの演算子のことだが、たいていの言語には三項演算子があったとしても ? : しかないので、三項演算子といえば ? : のことを指すことが多い。

C言語, C++

count == 1 ? "foot" : "feet"

右結合であるので以下のような書き方が可能。

count == 0 ? "zero" : count == 1 ? "one" : "many"

Go言語 (golang)

C言語に似ているGo言語には意外にも三項演算子がない。

Java

C言語ライクの三項演算子を使える。

count == 1 ? "foot" : "feet"

C言語と同じく右結合。

Scala

三項演算子がなく、代わりにif式を使う。 Scalaではifは文ではなく、値を返す式なので、三項演算子と同じ使い方ができる。

if(count == 1) "foot" else "feet";

PHP

C言語ライクの三項演算子を使える。

count == 1 ? "foot" : "feet"

PHP 5.3以降では、2項目を省略してエルビス演算子として使うこともできる。

他の言語と違いPHPでは左結合なので、三項演算子を入れ子にして使うのはやめたほうがよさそう。

PHPの三項演算子が左結合なのは、PHP言語仕様のバグだ
http://d.hatena.ne.jp/RepsolFireBlade/20130220/1361332690

Python

C言語ライクではないが、条件演算子ifを使って以下のように書ける。

"foot" if count == 1 else "feet"

条件演算子 | 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

C言語ライクの三項演算子を使える。Rubyでは条件演算子ともいう。

count == 1 ? "foot" : "feet"

Scalaと同じくRubyのifは値を返すので、三項演算子では複雑でわかりにくくなってしまう場合は、 ifを使ったほうがいいかも。

if count == 1 then "foot" else "feet" end

条件演算子 | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2foperator.html#cond

Perl

C言語ライクの三項演算子を使える。

$count == 1 ? 'foot' : 'feet'

JavaScript

C言語ライクの三項演算子を使える。

count == 1 ? 'foot' : 'feet'

C言語と同じく右結合。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。