Elvis Operator - Wikipedia
Có thể bạn quan tâm
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 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.
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] Main article: null coalescing operatorThis 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]- In GNU C and C++ (that is: in C and C++ with GCC extensions), the second operand of the ternary operator is optional.[4] This has been the case since at least GCC 2.95.3 (March 2001), and seems to be the original Elvis operator.[5]
- In Apache Groovy, the "Elvis operator" ?: 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.
- In PHP, it is possible to leave out the middle part of the ternary operator since PHP 5.3.[8] (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.[9] A common pattern is to use it with return, like this: valfoo=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",[10] 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.[11]
- In Google's Closure Templates, the Elvis operator is a null coalescing operator, equivalent to isNonnull($a) ? $a : $b.[12]
- In Ballerina, the Elvis operator L ?: R returns the value of L if it's not nil. Otherwise, return the value of R.[13]
- 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.[14]
See also
[edit]- ?: or conditional operator, when used as a ternary operator
- Safe navigation operator, often ?.
- Spaceship operator <=>
- Option type
References
[edit]- ^ Joyce Farrell (7 February 2013). Java Programming. Cengage Learning. 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.
- ^ "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.
Từ khóa » Toán Tử Elvis
-
Có Toán Tử Null Hợp Nhất (Elvis) Hoặc Toán Tử điều Hướng An Toàn ...
-
Toán Tử Elvis Trong Thymeleaf - Openplanning
-
Có Một Toán Tử Hợp Nhất Null (Elvis) Hoặc Toán Tử điều Hướng An ...
-
Phân Biệt Toán Tử ?? Và ?: Trong PHP - Viblo
-
Loại Bỏ Toán Tử Null Checks !! Trong Code Kotlin Của Bạn - Viblo
-
Làm Việc Với đối Tượng Null Và Non-null, Toán Tử Elvis Trong Kotlin
-
Toán Tử Bậc Ba Trong PHP - Viện Công Nghệ Thông Tin T3H
-
Toán Tử Giống Hệt Nhau Trong PHP Là Gì?
-
Tự Học Ngôn Ngữ Dart: Toán Tử (Operator) - 200lab Education
-
Sử Dụng Các Mẫu Kotlin Thông Dụng Trên Android
-
Kotlin Basic - My Notes
-
Làm Gì Trong Kotlin? (Nhà điều Hành Elvis) - Wake-up
-
Kotlin Bài 3: Null Safety – Kiểm Tra Biến Null An Toàn Trong Kotlin
-
Null Safety - Kotlin
-
Đơn Giản PHP Kiểm Tra Ngay Lập Tức
-
Toán Tử Trong Ngôn Ngữ Lập Trình Swift
-
Phim Hàn đoạt Giải Cannes Và Phim Về Elvis Presley Lên Rạp Cùng ...
-
Tìm Hiểu Về Null Safety Trong Kotlin | IT Life
-
Elvis Presley - Từ Cậu Bé Nghèo đến "Ông Hoàng Nhạc Rock And Roll"