Provozovatel Elvis - Elvis operator - Wikipedia
![]() | Bylo navrženo, že Nulový spojovací operátor být sloučeny do tohoto článku. (Diskutujte) Navrhováno od srpna 2020. |
![]() | Bylo navrženo, aby tento článek byl sloučeny do Vyhodnocení zkratu. (Diskutujte) Navrhováno od listopadu 2020. |
V některých programování jazyky, Provozovatel Elvis, často psaný ?:
, nebo
nebo ||
, je binární operátor který vrátí svůj první operand, pokud se tento operand vyhodnotí na skutečnou hodnotu, a jinak vyhodnotí a vrátí svůj druhý operand. To je identické s a zkrat nebo se sémantikou „poslední hodnoty“. Zápis operátora Elvis byl inspirován ternární podmíněný operátor, ? :
od výrazu operátora Elvis A?: B
je přibližně ekvivalentní ternárnímu podmíněnému A? A: B
.
Název „operátor Elvis“ odkazuje na skutečnost, že když je jeho běžná notace, ?:
, je při pohledu do strany, připomíná to emotikon z Elvis Presley s jeho patka.[1]
Podobný operátor je nulový operátor splynutí, kde je kontrola na booleovskou pravdivost nahrazena kontrolou nanula namísto. To je obvykle psáno ??
, a lze jej vidět v jazycích jako C#.[2]
Příklad
Boolovská varianta
V jazyce, který podporuje operátor Elvis, něco takového:
x = f ()?: g ()
nastaví X
se rovná výsledku F()
pokud je tento výsledek skutečnou hodnotou, a k výsledku G()
v opačném případě.
Je ekvivalentní s tímto příkladem pomocí podmíněný ternární operátor:
x = f ()? f (): g ()
kromě toho, že nehodnotí F()
dvakrát, pokud je to pravda.
Varianta odkazu na objekt
Výsledkem tohoto kódu bude odkaz na objekt, u kterého je zaručeno, že nebude null. Funkce F()
vrací odkaz na objekt namísto boolean a může vrátit null:
x = f ()?: "výchozí hodnota"
Jazyky podporující operátora Elvis
- V GNU C a C ++ (to znamená: v C a C ++ s GCC rozšíření), druhý operand ternárního operátoru je volitelný.[3] Tak tomu bylo přinejmenším od GCC 2.95.3 (březen 2001) a zdá se, že tomu tak je the původní operátor elvis.[4]
- v Apache Groovy „provozovatel Elvis“
?:
je dokumentován jako odlišný operátor;[5] tato funkce byla přidána do Groovy 1.5[6] (Prosinec 2007). Groovy, na rozdíl od GNU C a PHP, ano ne jednoduše povolte druhého operanda ternárního?:
být vynechán; spíše binární?:
musí být zapsán jako jediný operátor, bez mezer mezi nimi. - v PHP, je možné vynechat střední část ternárního operátoru od PHP 5.3.[7] (Červen 2009).
- The Fantom programovací jazyk má
?:
binární operátor, který porovnává svůj první operand snula
. - v Kotlin, operátor Elvis vrátí jeho levou stranu, pokud není null, a jeho pravou stranu jinak.[8] Běžným vzorem je použití s
vrátit se
, takhle:val foo = bar ()?: návrat
- v Bože,
?:
operátor vrátí pravý operand, pokud je levý také null. - v C#, null-podmíněné operátor,
?.
se označuje jako „operátor Elvis“,[9] ale neprovádí stejnou funkci. Místo toho operátor sloučení nuly??
dělá. - v Studená fúze a CFML, byl operátor Elvis zaveden pomocí
?:
syntax. - The Xtend programovací jazyk má operátora Elvis.[10]
- V Google Uzávěrové šablony, operátorem Elvis je a nulový operátor splynutí, ekvivalentní
isNonnull ($ a)? $ a: $ b
.[11] - Rychlý podporuje tento koncept svým operátorem spojujícím Nil
??
,[12] např.(a ?? b)
. - SQL podporuje tento koncept svou funkcí COALESCE, např.
COALESCE (a, b)
. - v Balerína, provozovatel Elvis
L?: R
vrací hodnotuL
pokud to není nic. V opačném případě vraťte hodnotuR
.[13] - Clojure podporuje tento koncept s
nebo
[14] makro, např.(nebo b)
. V případě Clojure je to var-arg, a ne binární, např.(nebo b c d e)
vrátí první nepravdivou hodnotu. - Šipka jazyk poskytuje ?? operátor, který vrací hodnotu na pravé straně, pokud je hodnota na levé straně null
- Strojopis podporuje tento koncept svým operátorem spojujícím nullish
??
, např.(a ?? b)
, protože v3.7.[15] - Lua podporuje tento koncept s
nebo
[16] logický operátor, např.(a nebo b)
.
Analogické použití zkratovacího operátoru OR
V několika jazycích, například Společný Lisp, Clojure, Lua, Perl, Krajta, Rubín, a JavaScript, operátor OR (obvykle ||
nebo nebo
) má stejné chování jako výše: vrácení prvního operandu, pokud by se v booleovském prostředí vyhodnotil jako true, a jinak vyhodnocení a vrácení druhého operandu. Když je levá strana pravdivá, pravá strana se ani nevyhodnocuje; to je "zkratovaný "Toto se liší od chování v jiných jazycích, jako je C / C ++, kde je výsledek ||
bude vždy booleovský.
Viz také
?:
nebo podmíněný operátor, pokud se používá jako ternární operátor- Provozovatel bezpečné navigace, často
?.
- Provozovatel kosmické lodi
<=>
- Typ možnosti
Reference
- ^ Joyce Farrell. Programování v Javě. str. 276. ISBN 978-1285081953.
Nový operátor se nazývá operátor Elvis, protože používá otazník a dvojtečku společně (? :); pokud se na něj podíváte z boku, připomene vám to Elvise Presleyho.
- ^ „?? operátor“. C # reference. Microsoft. Citováno 5. prosince 2018.
- ^ „Používání GNU Compiler Collection (GCC): Podmíněné“. gcc.gnu.org.
- ^ „Používání a portování kolekce kompilátorů GNU (GCC): rozšíření C“. gcc.gnu.org.
- ^ „Elvis Operator (? :))“.
- ^ „Programovací jazyk Apache Groovy - poznámky k verzi Groovy 1.5“. groovy-lang.org.
- ^ "PHP: Porovnávací operátoři - manuální". Web PHP. Citováno 2014-02-17.
- ^ "Nulová bezpečnost - programovací jazyk Kotlin". Kotlin.
- ^ Albahari, Joseph; Albahari, Ben (2015). C # 6.0 v kostce (6. vyd.). O'Reilly Media. str. 59. ISBN 978-1491927069.
- ^ Efftinge, Sven. „Xtend - výrazy“. eclipse.org.
- ^ „Uzávěrové šablony - výrazy“. GitHub.
- ^ „Programovací jazyk Swift (Swift 4.1): Základní operátoři“. developer.apple.com.
- ^ „Elvis Operator - Ballerina Programming Language“. Balerína.
- ^ „reference clojure.core nebo makro API“.
- ^ „Nullish coalescing commit by Kingwl · Pull Request # 32883 · Microsoft / TypeScript". GitHub. Citováno 2019-10-08.
- ^ „Lua nebo reference operátora“.