エルビス演算子とは
エルビス演算子(?:)は、一部の
プログラミング言語に存在する演算子で、条件分岐を簡潔に記述するために用いられます。三項演算子(? :)に似ていますが、第二項を省略したような動作をします。具体的には、左側の式(exprL)が真と評価される場合はその結果を、そうでない場合は右側の式(exprR)の結果を返します。
x = exprL ?: exprR
この演算子は、以下のような三項演算子の記述を簡略化したものと捉えることができます。
x = exprL ? exprL : exprR
ただし、エルビス演算子では`exprL`が真の場合に二度評価されることはありません。
エルビス演算子の特徴
エルビス演算子は、主に以下のような特徴を持ちます。
簡潔な記述: 三項演算子よりも短く書けるため、コードが読みやすくなります。
重複評価の回避: 左側の式が真の場合、二度評価されることがないため、効率的です。
Null合体演算子との類似性: Null合体演算子と似た機能を持つものの、第一項の扱いが異なります。ただし、一部の言語ではNull合体演算子の役割も兼ねています。
名前について
エルビス演算子の名前は、その記号 `?:` が、エルビス・プレスリーの顔文字に似ていることに由来します。
サポートする言語
エルビス演算子は、以下の様々な言語でサポートされています。
GNU C/C++: GCC拡張機能として、三項演算子の第二項省略が可能。GCC 2.95.3以降で使用可能。
PHP: PHP 5.3以降で `?:` の第二項省略が可能。
Apache Groovy: 独立した演算子 `?:` として実装。Groovy 1.5以降で利用可能。Groovyでは第二項の省略やスペースは不可。
Fantom: 第一項をnullと比較。
Kotlin: 第一項をnullと比較。第二項に制御式(throw式やreturn式)を記述可能。
Gosu: 第一項をnullと比較。
C#: Null合体演算子がエルビス演算子と同一視されることがあるが、第一項をnullと比較するという点で挙動が異なる。
Perl、
Python、
JavaScriptなどでは、
論理和演算子 (`||` または `or`) が同様の働きをします。これは、第一項が真値と評価される場合に第二項を評価せず、第一項の値を返し、第一項が偽値と評価される場合に第二項の値を返すという、
短絡評価の性質を利用したものです。
x = exprL || exprR
Common Lispや
Schemeでは、`or` 特殊フォームがエルビス演算子に相当する機能を提供します。`or` 特殊フォームは任意の個数の項を受け入れ、真値が見つかるまで順に評価します。真値が見つかった時点で評価を終え、その値を返します。
関連する演算子
条件演算子: `?:` (三項演算子)
Null合体演算子: `??` や `//` など。第一項がnullの場合に第二項を返す。
Null[[条件演算子]]: `?.` など。nullの場合にエラーを回避する。
宇宙船演算子: `<=>` など。大小比較結果を返す。
エルビス演算子は、コードをより簡潔に、そして効率的に記述するための便利なツールです。それぞれの言語における挙動を理解し、適切に利用することが重要です。