엘비스 연산자
Elvis operator특정 컴퓨터 프로그래밍 언어에서 엘비스 운영자는 종종 이렇게 쓰여졌다. or
또는
는 피연산자가 참 값으로 평가될 경우 첫 번째 피연산자를 반환하고, 그렇지 않을 경우 두 번째 피연산자를 평가하여 반환하는 이진 연산자다. 이것은 단락 또는 "마지막 값" 의미론과 동일하다. 엘비스 연산자의 표기법은 3차 조건부 연산자에 의해 영감을 받았다. ? :
엘비스 연산자의 표현 이후. A ?: B
약 3차 조건과 동일하다. A ? A : B
.
"Elvis 연산자"라는 이름은 일반적인 표기법일 때 ?:
에 대해 곁눈질하는 것은, 엘비스 프레슬리의 비위를 맞춘 이모티콘이나, 다른 방향에서는 그의 웃음과 닮았다.[1]
유사한 운영자는 null 병합 운영자로, 부울 진실에 대한 점검은 대신 null이 아닌 것에 대한 점검으로 대체된다. 이것은 보통 쓰여진다. ??
, 그리고 C#[2]과 같은 언어로 볼 수 있다.
예
부울 변종
엘비스 운영자를 지원하는 언어로는 다음과 같은 것이 있다.
x = f() ?: g()
할 것이다 x
의 결과에 필적하는 f()
만약 그 결과가 참된 값이라면, 그리고 그 결과에는 g()
그렇지 않으면
조건부 3차 연산자를 사용하는 것은 이 예와 같다.
x = f() ? f() : g()
평가하지 않는 한 f()
그것이 사실이라면 두 번
객체 참조 변종
이 코드는 null이 아닌 것으로 보장되는 객체를 참조하게 될 것이다. 함수 f()
부울 대신 개체 참조를 반환하고 null을 반환할 수 있음:
x = f() ?: "default value"
엘비스 운영자를 지원하는 언어
- GNU C와 C++(즉, GCC 확장자가 있는 C와 C++에서), 3차 연산자의 두 번째 피연산자는 선택사항이다.[3] 적어도 GCC 2.95.3(2001년 3월)부터 그랬고, 엘비스 오퍼레이터가 원조인 것 같다.[4]
- 아파치 그로비에서 "엘비스 운영자"
?:
구별되는 운영자로 문서화된다.[5] 이 기능은 Groovy 1.5(2007년[6] 12월)에서 추가되었다. 그루비는 GNU C와 PHP와는 달리 단순히 제2의 피연산자를 허용하지 않는다.?:
생략할 것. 오히려 이항.?:
단일한 연산자로 작성되어야 하며, 그 사이에 공백이 없어야 한다. - PHP에서는 PHP 5.3. [7](2009년 6월)부터 3차 연산자의 중간 부분을 생략할 수 있다.
- Fantom 프로그래밍 언어는
?:
첫 번째 피연산자와 비교하는 이진 연산자null
. - 코틀린에서 엘비스 운영자는 그것이 null이 아니라면 왼쪽을, 그렇지 않으면 오른쪽을 돌려준다.[8] 일반적인 패턴은 그것을 사용하는 것이다.
return
다음과 같은 경우:val foo = bar() ?: return
- 고수에서는
?:
연산자는 왼쪽도 null일 경우 오른쪽 피연산자를 반환한다. - C#에서 null 조건 연산자는
?.
"Elvis 연산자"[9]라고 불리지만, 동일한 기능을 수행하지는 않는다. 대신, null-coalescaking 연산자는??
한다 - 콜드퓨전(ColdFusion)과 CFML에서 엘비스 운영자는 이 시스템을 사용하여 소개되었다.
?:
구문. - Xtend 프로그래밍 언어에는 엘비스 연산자가 있다.[10]
- 구글의 폐쇄 템플릿에서, 엘비스 운영자는 null 병합 운영자로, 에 해당한다.
isNonnull($a) ? $a : $b
.[11] - Swift는 Nil-Coalescing 운영자와 함께 이 개념을 지원한다.
??
,[12] 예:(a ?? b)
. - SQL은 CONALESCE 함수와 같이 이 개념을 지원한다.
COALESCE(a, b)
. - 발레리나에서 엘비스 운영자
L ?: R
의 가치를 반환하다L
영이 아니면 그렇지 않으면 다음 값을 반환하십시오.R
.[13] - Clojure는 이 개념을
or
[14] 매크로(예: 매크로)(or a b)
. Clojure의 경우 var-arg이며, 예를 들어, 2진법이 아니다.(or a b c d e)
첫 번째 비거짓 값을 반환한다. - 다트 언어는? 왼쪽 값이 null일 경우 오른쪽 값을 반환하는 연산자
- TypeScript는 nullish-coalescing 연산자와 함께 이 개념을 지원한다.
??
, 예:(a ?? b)
v3.7 이후.[15] - JavaScript는 TypeScript와[16] 동일한 개념 지원
- 루아는 이 컨셉을 로 지지한다.
or
[17] 논리 연산자(예:(a or b)
.
단락 OR 연산자의 유사한 사용
Common Lisp, Clojure, Lua, Object Pascal, Perl, Python, Ruby 및 JavaScript와 같은 여러 언어에서 OR 연산자(일반적으로,
또는 or
)은 상기 동작과 동일하다: 부울 환경에서 참으로 평가될 경우 첫 번째 피연산자를 반환하고, 그렇지 않으면 두 번째 피연산자를 평가하여 반환한다. 왼손이 사실일 때 오른손은 평가조차 받지 않고 "짧은 원"이다. 이것은 C/C++와 같은 다른 언어에서의 행동과는 다르다.
항상 부울이 될 거야
참고 항목
참조
- ^ Joyce Farrell (7 February 2013). Java Programming. 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.
- ^ "Using the GNU Compiler Collection (GCC): Conditionals". 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.
- ^ "The Swift Programming Language (Swift 4.1): Basic Operators". developer.apple.com.
- ^ "Elvis Operator - Ballerina Programming Language". Ballerina. Archived from the original on 2018-12-20. Retrieved 2018-12-19.
- ^ "clojure.core or macro API reference".
- ^ "nullish coalescing commit by Kingwl · Pull Request #32883 · microsoft/TypeScript". GitHub. Retrieved 2019-10-08.
- ^ "Nullish coalescing operator (??)". mozilla. Retrieved 2021-01-28.
- ^ "Lua or operator Reference".