三項演算子
読み:さんこう-えんざんし
項が三つある演算子のこと。多項演算子の一つであり、条件演算子である。
概要
Cおよびその派生言語でよく見られる演算子である。
書式は次のとおりである。
<条件式> ? <真式> : <偽式>
条件式がtrueであれば真式、falseなら偽式が選択される。
特徴
言語
C/C++の影響を受けたプログラミング言語の仕様に存在することが多いが、敢えて三項演算子を仕様に含めない同系統言語もある。
三項演算子を言語仕様として持つ代表的なプログラミング言語は次の通り(ABC順)。
以下言語には直接的な三項演算子はないが、同様に使える構文糖やそれに類するものが用意されている。
C/C++
C/C++では、三項演算子は条件演算子しかないため、条件演算子の別名として三項演算子と呼ばれることもある。この画期的な仕様が、後にの派生言語や派生スクリプト言語に広く継承されることになった。
書式は次のとおりである。
条件式 ? 真式 : 偽式
条件式がtrueであれば真式、falseなら偽式が選択される。
次のようなif文があったとする。
if ( a > b ) {
c = d;
} else {
c = e;
}
条件演算子を用いると、次のように書き換えることができる。
c = ( a > b ) ? d : e;
条件演算子は殆どの場合、右辺値として使用されるが、左辺値として使用する事も不可能ではない。但し、?:演算子は他の演算子と同様に値を産み出すが、値には代入できない。
つまり、以下は使用できないが
((condition) ? a : b) = c;
値からポインターを作る方法を用いれば、これも可能である。以下は使用できる。
*((condition) ? &a : &b) = c;
Kotlin
KotlinはJavaから派生したC/C++の系統言語ではあるが、三項演算子は無い。しかしKotlinの場合、ifは文ではなく式であり、それ自体が値を返す。そこで、Kotlinはif式でそれを代用することが可能である。
つまり上のサンプルで以下のようなものは、
c = ( a > b ) ? d : e;
Kotlinでは次のように書ける。
c = if ( a > b ) d else e
これが可能であるため、機能的に重複する三項演算子を言語仕様に含めなかったのだろうと予想される。
再検索