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.
Contents
Example
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.
Name
The name "Elvis operator" refers to its resemblance to an emoticon of Elvis Presley.
Languages supporting 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.?:
binary operator that compares its first operand with null
.val foo = bar() ?: return
??
has sometimes been referred to as the "Elvis operator", but it does not perform the same function.Analogous use of the OR operator
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
While Elvis operator compares to boolean false, Null coalescing operator compares to null.