엘비스 연산자

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 CC++(즉, 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]
  • JavaScriptTypeScript[16] 동일한 개념 지원
  • 루아는 이 컨셉을 로 지지한다. or[17] 논리 연산자(예: (a or b).

단락 OR 연산자의 유사한 사용

Common Lisp, Clojure, Lua, Object Pascal, Perl, Python, RubyJavaScript와 같은 여러 언어에서 OR 연산자(일반적으로, 또는 or)은 상기 동작과 동일하다: 부울 환경에서 참으로 평가될 경우 첫 번째 피연산자를 반환하고, 그렇지 않으면 두 번째 피연산자를 평가하여 반환한다. 왼손이 사실일 때 오른손은 평가조차 받지 않고 "짧은 원"이다. 이것은 C/C++와 같은 다른 언어에서의 행동과는 다르다. 항상 부울이 될 거야

참고 항목

참조

  1. ^ 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.
  2. ^ "?? Operator". C# Reference. Microsoft. Retrieved 5 December 2018.
  3. ^ "Using the GNU Compiler Collection (GCC): Conditionals". gcc.gnu.org.
  4. ^ "Using and Porting the GNU Compiler Collection (GCC): C Extensions". gcc.gnu.org.
  5. ^ "Elvis Operator (?: )".
  6. ^ "The Apache Groovy programming language - Groovy 1.5 release notes". groovy-lang.org.
  7. ^ "PHP: Comparison Operators - Manual". PHP website. Retrieved 2014-02-17.
  8. ^ "Null Safety - Kotlin Programming Language". Kotlin.
  9. ^ Albahari, Joseph; Albahari, Ben (2015). C# 6.0 in a Nutshell (6 ed.). O'Reilly Media. p. 59. ISBN 978-1491927069.
  10. ^ Efftinge, Sven. "Xtend - Expressions". eclipse.org.
  11. ^ "Closure Templates - Expressions". GitHub. 29 October 2021.
  12. ^ "The Swift Programming Language (Swift 4.1): Basic Operators". developer.apple.com.
  13. ^ "Elvis Operator - Ballerina Programming Language". Ballerina. Archived from the original on 2018-12-20. Retrieved 2018-12-19.
  14. ^ "clojure.core or macro API reference".
  15. ^ "nullish coalescing commit by Kingwl · Pull Request #32883 · microsoft/TypeScript". GitHub. Retrieved 2019-10-08.
  16. ^ "Nullish coalescing operator (??)". mozilla. Retrieved 2021-01-28.
  17. ^ "Lua or operator Reference".