条件演算子とは
条件演算子は、
プログラミング言語において、条件に応じて異なる値を返す式です。これは、`if-else`文のような条件分岐を、より簡潔に記述するための構文と言えます。
概要
条件演算子は、主に
三項演算子として知られています。これは、条件式、
真式、偽式の3つのオペランドを取り、条件式の評価結果に応じて、
真式または偽式の値を返します。また、二項演算子として、条件式と
真式または偽式のいずれかを取るものもあります。
条件文との主な違いは以下の点です。
真式・偽式は式であるため、文を置くことはできません。
式であるため、値を持ちます。
主な種類
C言語や
C++などでは、`条件式 ?
真式 : 偽式`という構文が用いられます。
条件式:[真]または偽(false)の論理値を返す式。
真式:条件式が
真の場合に評価される式。
偽式:条件式が偽の場合に評価される式。
この演算子全体が式として評価され、真式または偽式のいずれかの値を持ちます。
例えば、Javaでは以下のようになります。
java
String message = (weight <= 100) ? "OK" : "積載量オーバー";
これは、`weight`変数が100以下であれば`message`に"OK"が、そうでなければ"積載量オーバー"が代入されることを意味します。`if-else`文とほぼ同じ意味を持ちますが、より簡潔に記述できます。
演算子の結合性
条件演算子の結合性は言語によって異なります。CやJavaなどでは、`a ? b : c ? d : e`は`a ? b : (c ? d : e)`と解釈されますが、PHPでは`(a ? b : c) ? d : e`となるため注意が必要です。
RubyでもCと同様に`条件式 ? 真式 : 偽式`の形式で使用できます。ただし、Rubyでは`if`も式であるため、複雑な条件分岐の場合は`if`文を使う方が推奨されます。
Pythonでは、条件式は`真式 if 条件式 else 偽式`という順序で記述されます。
python
message = "OK" if weight <= 100 else "積載量オーバー"
Visual Basic(2008より前)では、`IIf(条件式, 真式, 偽式)`という関数を使用します。ただし、この関数は条件に関わらず真式と偽式を両方評価するため、副作用に注意が必要です。Visual Basic 2008以降では、`If`演算子が導入され、短絡評価が可能になりました。
短絡評価を持つ論理演算子`AND`と`OR`を組み合わせることで、条件演算子に似た処理を記述できます。例えば、`(cond AND expr1) OR expr2`とすることで、`cond`が真なら`expr1`を評価し、偽なら`expr2`を評価します。ただし、論理演算子の結果はブール値となるため、値自体を利用することはできません。
条件演算子とif式
`if`が式である言語では、条件演算子の代わりに`if`式を使用できます。例えば、F#では条件演算子は組み込まれていませんが、`if`式で同様の処理を実現できます。
その他の方法
Smalltalkのように、無名関数を利用して条件分岐を表現する方法もあります。
関連する演算子
Null合体演算子: `A ?? B` (Aがnullの場合にBを返す)
エルビス演算子: `A ?: B` (Aがfalseの場合にBを返す)
Null条件演算子: `A?.B` (Aがnullの場合にnullを返す)
条件演算子は、コードをより簡潔にする便利なツールですが、可読性を損なわないように注意して使用する必要があります。