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, [[%3F:|? :]]
, 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]
In several languages, such as Common Lisp, Clojure, Lua, Object Pascal, Perl, Python, Ruby, and JavaScript, the logical disjunction 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.
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.
See 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"
?:
is documented as a distinct operator;[6] this feature was added in Groovy 1.5[7] (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
.return
, like this:?:
operator returns the right operand if the left is null as well.?.
is referred to as the "Elvis operator",[10] but it does not perform the same function. Instead, the null-coalescing operator ??
does.?:
syntax.isNonnull($a) ? $a : $b
.[12]L ?: R
returns the value of L
if it's not nil. Otherwise, return the value of R
.[13]??
) 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.[14]?:
or conditional operator, when used as a ternary operator?.
<=>