热门问题
时间线
聊天
视角

埃爾維斯運算符

来自维基百科,自由的百科全书

Remove ads

程式語言中,埃爾維斯運算符是一種二元運算符,常寫為?:or||,如果第一操作數求值為真則返回其值,否則返回第二操作數的值。類似於帶有「最後值」語義的短路求值。埃爾維斯運算符是受三元條件運算符 ? :啟發而被提出的。因為埃爾維斯運算符表達式A ?: B近似於三元條件運算符A ? A : B

埃爾維斯運算符得名於它的通常表示法?:,相似於埃爾維斯·普雷斯利(即「貓王」)的顏文字側臉的額發英語quiff,或者其他角度看相遇於他的得意的笑臉。[1]

有一個相似的運算符是空值結合運算符,把布爾真值檢查改為是否為空指針null。常寫為??,如C#[2]

程式語言支持

  • GNU CC++的語言擴展,從2001年3月的GCC 2.95.3版本開始,三元運算符的第二操作數是可選的。[3]看起來這是最早的埃爾維斯運算符。[4]
  • Apache Groovy的埃爾維斯運算符?:是個獨特的運算符。[5]起自2007年12月的Groovy 1.5[6]。不同於GNU C和PHP,Groovy不是簡單地允許三元運算符?:第二操作數可忽略,而是?:作為單獨的二元運算符其間不能有空格符。
  • PHP 5.3開始,允許三元運算符的中間部分可留空。[7] (June 2009).
  • Fantom語言英語Fantom (programming language)?:二元運算符,比較第一操作數是否為null
  • Kotlin語言的埃爾維斯運算符的左操作數的值不為null則返回其值, 否則返回右操作數的值。[8] 常用於return,如:val foo = bar() ?: return
  • Gosu語言英語Gosu (programming language)?:運算符
  • C#安全導航運算符?.是一種埃爾維斯運算符,[9]。但C#的空值結合運算符??才是相當於別的語言的?:的埃爾維斯運算符。
  • Adobe ColdFusionCFML英語CFML的埃爾維斯運算符是?:
  • Xtend英語Xtend有埃爾維斯運算符.[10]
  • GoogleClosure Templates英語Google Closure Tools#Closure Templates的埃爾維斯運算符是空值結合運算符,等效於isNonnull($a) ? $a : $b[11]
  • Swift的Nil結合運算符??[12],例如(a ?? b).
  • SQL的COALESCE函數,例如COALESCE(a, b)
  • Ballerina英語Ballerina (programming language)的埃爾維斯運算符L ?: R[13]
  • Clojure支持or[14]宏,如(or a b)。這是操作數個數可變的操作符而不是二元操作符,例如(or a b c d e)將返回第一個非假的操作數的值。
  • Dart語言提供了??運算符
  • JavaScript空值結合運算符??,例如(a ?? b)[15]
  • TypeScript從版本3.7開始[16],如同JavaScript開始支持埃爾維斯運算符。
  • Lua支持or[17]邏輯運算符,如(a or b).
Remove ads

類似的短路運算符OR

Common Lisp, Clojure, Lua, Object Pascal, Perl, Python, Ruby, JavaScript等程式語言中, OR運算符(典型為||or)都是短路行為:如果左操作數的值為真,則表達式結果為真,不再對右操作數求值。這被稱作短路求值

C/C++語言標準強制||&&短路求值運算符。

參見

參考文獻

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads