fbpx
Wikipedia

Elvis operator

In certain computer programming languages, the Elvis operator, often written ?:, is a binary operator that returns the evaluated first operand if that operand evaluates to a value likened to logically true (according to a language-dependent convention, in other words, a truthy value), and otherwise returns the evaluated second operand (in which case the first operand evaluated to a value likened to logically false, in other words, a falsy value). This is identical to a short-circuit or with "last value" semantics. The notation of the Elvis operator was inspired by the ternary conditional operator, ? :, since the Elvis operator expression A ?: B is approximately equivalent to the ternary conditional expression A ? A : B.

The name "Elvis operator" refers to the fact that when its common notation, ?:, is viewed sideways, it resembles an emoticon of Elvis Presley with his signature hairstyle.[1]

A similar operator is the null coalescing operator, where the boolean truth(iness) check is replaced with a check for non-null instead. This is usually written ??, and can be seen in languages like C#[2] or Dart.[3]

Alternative syntaxes edit

In several languages, such as Common Lisp, Clojure, Lua, Object Pascal, Perl, Python, Ruby, and JavaScript, the OR operator (typically || or or) has the same behavior as the above: returning its first operand if it would evaluate to a truthy value, and otherwise evaluating and returning its second operand, which may be a truthy or falsy value. When the left-hand side is truthy, the right-hand side is not even evaluated; it is "short-circuited". This is different than the behavior in other languages such as C/C++, where the result of || will always be a (proper) boolean.

Example edit

Boolean variant edit

In a language that supports the Elvis operator, something like this:

x = f() ?: g()

will set x equal to the result of f() if that result is truthy, and to the result of g() otherwise.

It is equivalent to this example, using the conditional ternary operator:

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

except that it does not evaluate f() twice if it yields truthy. Note the possibility of arbitrary behaviour if f() is not a state-independent function that always returns the same result.

Object reference variant edit

This code will result in a reference to an object that is guaranteed to not be null. Function f() returns an object reference instead of a boolean, and may return null, which is universally regarded as falsy:

x = f() ?: "default value"

Languages supporting the Elvis operator edit

  • Perl since version v5.10 provides the Logical Defined Or operator: //, equivalent to defined $a ? $a : $b [4]
  • In GNU C and C++ (that is: in C and C++ with GCC extensions), the second operand of the ternary operator is optional.[5] This has been the case since at least GCC 2.95.3 (March 2001), and seems to be the original Elvis operator.[6]
  • In Apache Groovy, the "Elvis operator" ?: is documented as a distinct operator;[7] this feature was added in Groovy 1.5[8] (December 2007). Groovy, unlike GNU C and PHP, does not simply allow the second operand of ternary ?: to be omitted; rather, binary ?: must be written as a single operator, with no whitespace in between.
  • In PHP, it is possible to leave out the middle part of the ternary operator since PHP 5.3.[9] (June 2009).
  • The Fantom programming language has the ?: binary operator that compares its first operand with null.
  • In Kotlin, the Elvis operator returns its left-hand side if it is not null, and its right-hand side otherwise.[10] A common pattern is to use it with return, like this: val foo = bar() ?: return
  • In Gosu, the ?: operator returns the right operand if the left is null as well.
  • In C#, the null-conditional operator, ?. is referred to as the "Elvis operator",[11] but it does not perform the same function. Instead, the null-coalescing operator ?? does.
  • In ColdFusion and CFML, the Elvis operator was introduced using the ?: syntax.
  • The Xtend programming language has an Elvis operator.[12]
  • In Google's Closure Templates, the Elvis operator is a null coalescing operator, equivalent to isNonnull($a) ? $a : $b.[13]
  • In Ballerina, the Elvis operator L ?: R returns the value of L if it's not nil. Otherwise, return the value of R.[14]
  • In JavaScript, the nullish coalescing (??) operator is a logical operator that returns its right-hand side operand when its left-hand side operand is null or undefined, and otherwise returns its left-hand side operand.[15]

See also edit

References edit

  1. ^ Joyce Farrell (7 February 2013). Java Programming. p. 276. ISBN 978-1285081953. The new operator is called Elvis operator because it uses a question mark and a colon together (?:); if you view it sideways, it reminds you of Elvis Presley.
  2. ^ "?? Operator". C# Reference. Microsoft. Retrieved 5 December 2018.
  3. ^ "Conditional expressions". Dart Language. Google.
  4. ^ "perlop - Perl operators and precedence -Perldoc Browser". Perl.org. Retrieved 2023-01-19.
  5. ^ "Using the GNU Compiler Collection (GCC): Conditionals with omitted operands". gcc.gnu.org.
  6. ^ "Using and Porting the GNU Compiler Collection (GCC): C Extensions". gcc.gnu.org.
  7. ^ "Elvis Operator (?: )".
  8. ^ "The Apache Groovy programming language - Groovy 1.5 release notes". groovy-lang.org.
  9. ^ "PHP: Comparison Operators - Manual". PHP website. Retrieved 2014-02-17.
  10. ^ "Null Safety - Kotlin Programming Language". Kotlin.
  11. ^ Albahari, Joseph; Albahari, Ben (2015). C# 6.0 in a Nutshell (6 ed.). O'Reilly Media. p. 59. ISBN 978-1491927069.
  12. ^ Efftinge, Sven. "Xtend - Expressions". eclipse.org.
  13. ^ "Closure Templates - Expressions". GitHub. 29 October 2021.
  14. ^ . Ballerina. Archived from the original on 2018-12-20. Retrieved 2018-12-19.
  15. ^ "Nullish coalescing operator (??) - JavaScript | MDN". developer.mozilla.org. Retrieved 2023-01-05.

elvis, operator, this, article, about, operator, binary, operator, ternary, operator, certain, computer, programming, languages, often, written, binary, operator, that, returns, evaluated, first, operand, that, operand, evaluates, value, likened, logically, tr. This article is about the use of a operator as a binary operator For use as a ternary operator see In certain computer programming languages the Elvis operator often written is a binary operator that returns the evaluated first operand if that operand evaluates to a value likened to logically true according to a language dependent convention in other words a truthy value and otherwise returns the evaluated second operand in which case the first operand evaluated to a value likened to logically false in other words a falsy value This is identical to a short circuit or with last value semantics The notation of the Elvis operator was inspired by the ternary conditional operator a href 3F html class mw redirect title a since the Elvis operator expression A B is approximately equivalent to the ternary conditional expression A A B The name Elvis operator refers to the fact that when its common notation is viewed sideways it resembles an emoticon of Elvis Presley with his signature hairstyle 1 A similar operator is the null coalescing operator where the boolean truth iness check is replaced with a check for non null instead This is usually written and can be seen in languages like C 2 or Dart 3 Contents 1 Alternative syntaxes 2 Example 2 1 Boolean variant 2 2 Object reference variant 3 Languages supporting the Elvis operator 4 See also 5 ReferencesAlternative syntaxes editIn several languages such as Common Lisp Clojure Lua Object Pascal Perl Python Ruby and JavaScript the OR operator typically or or has the same behavior as the above returning its first operand if it would evaluate to a truthy value and otherwise evaluating and returning its second operand which may be a truthy or falsy value When the left hand side is truthy the right hand side is not even evaluated it is short circuited This is different than the behavior in other languages such as C C where the result of will always be a proper boolean Example editBoolean variant edit In a language that supports the Elvis operator something like this x f g will set x equal to the result of f if that result is truthy and to the result of g otherwise It is equivalent to this example using the conditional ternary operator x f f g except that it does not evaluate f twice if it yields truthy Note the possibility of arbitrary behaviour if f is not a state independent function that always returns the same result Object reference variant edit Main article null coalescing operator This code will result in a reference to an object that is guaranteed to not be null Function f returns an object reference instead of a boolean and may return null which is universally regarded as falsy x f default value Languages supporting the Elvis operator editPerl since version v5 10 provides the Logical Defined Or operator equivalent to defined a a b 4 In GNU C and C that is in C and C with GCC extensions the second operand of the ternary operator is optional 5 This has been the case since at least GCC 2 95 3 March 2001 and seems to be the original Elvis operator 6 In Apache Groovy the Elvis operator is documented as a distinct operator 7 this feature was added in Groovy 1 5 8 December 2007 Groovy unlike GNU C and PHP does not simply allow the second operand of ternary to be omitted rather binary must be written as a single operator with no whitespace in between In PHP it is possible to leave out the middle part of the ternary operator since PHP 5 3 9 June 2009 The Fantom programming language has the binary operator that compares its first operand with null In Kotlin the Elvis operator returns its left hand side if it is not null and its right hand side otherwise 10 A common pattern is to use it with return like this span class kd val span span class w span span class nv foo span span class w span span class o span span class w span span class n bar span span class p span span class w span span class o span span class w span span class k return span In Gosu the operator returns the right operand if the left is null as well In C the null conditional operator is referred to as the Elvis operator 11 but it does not perform the same function Instead the null coalescing operator does In ColdFusion and CFML the Elvis operator was introduced using the syntax The Xtend programming language has an Elvis operator 12 In Google s Closure Templates the Elvis operator is a null coalescing operator equivalent to isNonnull a a b 13 In Ballerina the Elvis operator L R returns the value of L if it s not nil Otherwise return the value of R 14 In JavaScript the nullish coalescing operator is a logical operator that returns its right hand side operand when its left hand side operand is null or undefined and otherwise returns its left hand side operand 15 See also edit or conditional operator when used as a ternary operator Safe navigation operator often Spaceship operator lt gt Option typeReferences edit Joyce Farrell 7 February 2013 Java Programming p 276 ISBN 978 1285081953 The new operator is called Elvis operator because it uses a question mark and a colon together if you view it sideways it reminds you of Elvis Presley Operator C Reference Microsoft Retrieved 5 December 2018 Conditional expressions Dart Language Google perlop Perl operators and precedence Perldoc Browser Perl org Retrieved 2023 01 19 Using the GNU Compiler Collection GCC Conditionals with omitted operands gcc gnu org Using and Porting the GNU Compiler Collection GCC C Extensions gcc gnu org Elvis Operator The Apache Groovy programming language Groovy 1 5 release notes groovy lang org PHP Comparison Operators Manual PHP website Retrieved 2014 02 17 Null Safety Kotlin Programming Language Kotlin Albahari Joseph Albahari Ben 2015 C 6 0 in a Nutshell 6 ed O Reilly Media p 59 ISBN 978 1491927069 Efftinge Sven Xtend Expressions eclipse org Closure Templates Expressions GitHub 29 October 2021 Elvis Operator Ballerina Programming Language Ballerina Archived from the original on 2018 12 20 Retrieved 2018 12 19 Nullish coalescing operator JavaScript MDN developer mozilla org Retrieved 2023 01 05 Retrieved from https en wikipedia org w index php title Elvis operator amp oldid 1219682004, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.