エルヴィスオペレーター

エルヴィス・プレスリーの髪型は横から見たオペレーターに似ている

特定のコンピュータプログラミング言語において、エルビス演算子(しばしば と表記される)は二項演算子?:であり、その最初のオペランドを評価し、その値が論理的に真(言語依存の規則に従って、つまり真の値)の場合はそれを返し、そうでない場合は2番目のオペランドを評価して返します。2番目のオペランドは、返される場合にのみ評価されます(短絡評価)。エルビス演算子の表記法は、三項条件演算子 にヒントを得ています。エルビス演算子の式は、三項条件式 とほぼ等価であるためです。 ? :A ?: BA ? A : B

「エルヴィス演算子」という名前は?:、横から見ると表記がエルヴィス・プレスリー特徴的な髪型顔文字に似ていることに由来する。[ 1 ]

同様の演算子として、 null合体演算子があります。これは、ブール値の真偽判定を非null判定に置き換えた演算子です。これは通常 と記述され、 C# [ 2 ]Dart [ 3 ]??などの言語で見られます。

代替構文

Common LispClojureLuaObject PascalPerlPythonRubyJavaScriptなどの言語では、エルビス演算子は必要ありません。これは、言語の論理和演算子 (通常は||またはor) が短絡的であり、最初のオペランドが真の値に評価される場合は最初のオペランドを返し、そうでない場合は 2 番目のオペランド (真または偽の値になる場合があります) (C や C++ のようなブール値のtrueまたはfalseではありません) を返すためです。これらのセマンティクスはエルビス演算子と同じです。

ブール変数

Elvis 演算子をサポートする言語では、次のようになります。

x = f() ?: g()

x結果が真である場合はの結果に等しく設定されf()g()そうでない場合は の結果に等しく設定されます。

これは、条件付き三項演算子を使用した次の例と同等です。

x = f() ? f() : g()

ただし、真偽値を返す場合は2回評価されないという点が異なります。常に同じ結果を返す状態独立関数でない f()場合は、任意の動作が発生する可能性があることに注意してください。f()

オブジェクト参照バリアント

このコードは、nullではないことが保証されたオブジェクトへの参照を生成します。関数はf()ブール値ではなくオブジェクト参照を返し、nullを返す可能性がありますが、これは一般的に偽値とみなされます。

x = f() ?: "default value"

Elvis演算子をサポートする言語

  • GNU CC++(つまりGCC拡張付きのCとC++)では、三項演算子の2番目のオペランドはオプションです。[ 4 ]これは少なくともGCC 2.95.3(2001年3月)以降で当てはまっており、元々のエルビス演算子のようです[ 5 ]
  • Apache Groovyでは、「エルビス演算子」は?:独立した演算子としてドキュメント化されています。[ 6 ]この機能は Groovy 1.5 [ 7 ] (2007年12月)で追加されました。Groovy は、GNU C や PHP とは異なり、三項演算子の第二オペランドを単純に省略することはできません?:。むしろ、二項演算子は?:間に空白を入れずに単一の演算子として記述する必要があります。
  • PHPでは、PHP 5.3以降、三項演算子の中間部分を省略することが可能になりました。[ 8 ](2009年6月)。
  • Fantomプログラミング言語には、最初?:のオペランドをと比較する二項演算子がありますnull
  • Kotlinでは、エルビス演算子は、nullでない場合は左側を返し、そうでない場合は右側を返します。[ 9 ]一般的なパターンは、次のように と一緒に使用することですreturnvalfoo=bar()?:return
  • Gosuでは、?:左側も null の場合、演算子は右側のオペランドを返します。
  • C#では、null条件演算子は「エルビス演算子」 [ 10 ]?.と呼ばれますが、同じ機能を果たすわけではありません。代わりに、null合体演算子が同様の機能を果たします。??
  • ColdFusionおよびCFMLでは、構文を使用して Elvis 演算子が導入されました?:
  • Xtendプログラミング言語はエルビス演算子がある。[ 11 ]
  • Googleのクロージャテンプレートでは、エルビス演算子はヌル合体演算子であり、 と同等であるisNonnull($a) ? $a : $b[ 12 ]
  • Ballerinaでは、エルビス演算子はがnilでない場合、L ?: Rの値を返しますL。そうでない場合は の値を返しますR[ 13 ]
  • JavaScriptでは、ヌル合体(??)演算子は、左側のオペランドがnullまたはの場合は右側のオペランドを返しundefined、それ以外の場合は左側のオペランドを返す論理演算子です。[ 14 ]
  • Perlには、論理短絡論理和||と、同様の優先順位の低い がありますor[ 15 ]これらは、短絡せずに両方のオペランドを評価するビットごとの or演算子とは異なります。対応する代入演算子もあり、これは右側のオペランドを評価し、左側のオペランドの論理値が true でない限り、それを左側のオペランドに割り当てます。また、右側のオペランドを評価し、左側のオペランドが未定義の場合にのみその値を返す、短絡定義 or演算子もあります。最後に、対応する代入演算子は です。同様の排他的論理和演算子は短絡しないため、エルビス演算子ではありません。他の短絡演算子には論理積演算子と がありますが、その動作はエルビス演算子と逆になります。|||=////=&&and

参照

参考文献

  1. ^ Joyce Farrell (2013年2月7日). Javaプログラミング. Cengage Learning. p. 276. ISBN 978-1285081953新しい演算子は、疑問符とコロン (?:) を一緒に使用するため、エルビス演算子と呼ばれます。横から見ると、エルビス プレスリーを連想させます。
  2. ^ "?? 演算子" . C#リファレンス. Microsoft . 2018年12月5日閲覧。
  3. ^ 「条件式」 . Dart言語. Google.
  4. ^ 「条件文(GNUコンパイラコレクション(GCC)の使用):オペランドが省略された条件文」 gcc.gnu.org . 2026年1月14日閲覧
  5. ^ 「GNU コンパイラ コレクション (GCC) の使用と移植: C 拡張機能。gcc.gnu.org
  6. ^ 「エルヴィス演算子 (?: )」
  7. ^ 「Apache Groovy プログラミング言語 - Groovy 1.5 リリース ノート」。groovy -lang.org
  8. ^ 「PHP: 比較演算子 - マニュアル」 PHPウェブサイト。 2014年2月17日閲覧
  9. ^ 「 Null安全性 - Kotlinプログラミング言語」Kotlin
  10. ^アルバハリ、ジョセフ;アルバハリ、ベン (2015)。C# 6.0 の概要(第 6 版)。オライリーメディア。 p. 59.ISBN 978-1491927069
  11. ^ Efftinge, Sven. 「Xtend - Expressions」 . eclipse.org .
  12. ^ 「クロージャテンプレート - 式」 . GitHub . 2021年10月29日.
  13. ^ 「Elvis Operator - Ballerinaプログラミング言語」Ballerina . 2018年12月20日時点のオリジナルよりアーカイブ。 2018年12月19日閲覧
  14. ^ 「Nullish coalescing operator (??) - JavaScript | MDN」 . developer.mozilla.org . 2023年1月5日閲覧
  15. ^ "perlop" . 2025年7月9日閲覧
「 https://en.wikipedia.org/w/index.php?title=エルヴィス・オペレーター&oldid =1332878154」より取得