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()
x equal to the result of
f() if that result is a true value, and to the result of
It is equivalent to this:
x = f() ? f() : g()
except that it does not evaluate the
f() twice if it is true.
Languages supporting the Elvis operator
- In GNU C and C++ (that is: in C and C++ with GCC extensions), the second operand of the ternary operator is optional. This has been the case since at least GCC 2.95.3 (March 2001).
- In Apache Groovy, the "Elvis operator"
?:is documented as a distinct operator; this feature was added in Groovy 1.5 (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 (June 2009).
- The Fantom programming language has the
?:binary operator that compares its first operand with
- In Kotlin elvis operator returns expression that comes before it, if it's not null and expression after it otherwise. 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 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
Analogous use of the OR operator
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
While Elvis operator compares to boolean false, Null coalescing operator compares to null.
?:or conditional operator, when used as a ternary operator
- Null coalescing operator,
- Safe navigation operator, often
- Spaceship operator
- "coding style - ?: operator". Stack Overflow. Retrieved 2014-02-17. Lay summary – elvis emoticon graphic.
- Joyce Farrell. Java Programming. p. 276. ISBN 978-1285081953.
The new operator is called Elvis operator because it uses a question mark and a colo together (?:)
- "Elvis Operator (?: )".
- "PHP: Comparison Operators - Manual". PHP website. Retrieved 2014-02-17.