Elvis operator

From Wikipedia, the free encyclopedia
Jump to: navigation, search

In certain computer programming languages, the Elvis operator ?: is a binary operator that returns its first operand if that operand is true, and otherwise evaluates and returns its second operand. It is a variant of the ternary conditional operator, ? :, found in those languages (and many others): the Elvis operator is the ternary operator with its second operand omitted.


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 a true value, and to the result of g() otherwise.

It is equivalent to this:

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

except that it does not evaluate the f() twice if it is true.


The name "Elvis operator" refers to its resemblance to an emoticon of Elvis Presley.[1][2]

Languages supporting the Elvis operator[edit]

  • In GNU C and C++ (that is: in C and C++ with GCC extensions), the second operand of the ternary operator is optional.[3] This has been the case since at least GCC 2.95.3[4] (March 2001).
  • In Apache Groovy, the "Elvis operator" ?: is documented as a distinct operator;[5] this feature was added in Groovy 1.5[6] (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, the second operand of the ternary operator has been optional since PHP 5.3[7] (June 2009).
  • The Fantom programming language has the ?: binary operator that compares its first operand with null.
  • In Kotlin elvis operator returns expression that comes before it, if it's not null and expression after it otherwise.[8] Common pattern is to use it with return keyword val foo = bar() ?: return
  • In Gosu the ?: operator also returns the right operand if the left is null.
  • In C#, the null coalescing operator, ?? has sometimes[9][10] been referred to as the "Elvis operator", but it does not perform the same function.
  • In ColdFusion and CFML the Elvis Operator was introduced using the ?: syntax.

Analogous use of the OR operator[edit]

In several languages, such as Perl, Python, and JavaScript, the OR operator (typically || or or) has the same behavior as the above: returning its first operand if it would evaluate to true in a boolean environment, and otherwise evaluating and returning its second operand.

Comparison to the null coalescing operator[edit]

While Elvis operator compares to boolean false, Null coalescing operator compares to null.

See also[edit]