요다 조건

Yoda conditions

프로그래밍 전문 용어에서 요다 조건(요다 표기법이라고도 함)은 조건문의 일반적인 순서에서 표현의 두 부분을 반대로 하는 프로그래밍 스타일입니다.Yoda 조건은 표현식의 상수 부분을 조건문 왼쪽에 배치합니다.

Yoda 조건은 Symfony[1] WordPress의 [2]코딩 표준의 일부입니다.

기원.

이 프로그래밍 스타일의 이름은 스타워즈 캐릭터 요다에서 유래한 것으로, 그는 비표준적[3] 구문(예를 들어, "900살이 되면, 당신은 그렇게 되지 않을 것이다.")으로 영어를 구사한다.[4][5]토마스 M.Tuerke는 요다 표기법을 만들어 [6]2006년에 처음으로 온라인에 공개했다고 주장한다.그에 따르면, 요다 상태라는 용어는 이후 2010년 펠릭스 클로티에에 의해 유행되었다.

일반적으로 조건문은 다음과 같이 작성됩니다.

한다면 ($value($value) == 42) { /* ... */ } // 다음과 같이 읽습니다. "값이 42와 같으면..." 

요다 조건은 같은 식을 나타내지만 반대입니다.

한다면 (42 == $value($value)) { /* ... */ } // 다음과 같이 읽힙니다. "42가 값과 같으면..." 

장점

에러 검출

식에 상수 값을 배치해도 프로그램의 동작은 변경되지 않습니다(값이 false로 평가되지 않는 한).아래를 참조해 주세요.단일 등호를 사용하는 프로그래밍 언어(=비교가 아닌 할당의 경우 조건문을 쓰는 대신 의도하지 않게 값을 할당하는 실수가 발생할 수 있습니다.

한다면 (마이넘버 = 42) { /* ... */ } // 원하는 조건을 평가하는 대신 myNumber에 42를 할당합니다. 

요다 조건 사용:

한다면 (42 = 마이넘버) { /* ... */ } // 구문 오류이며 컴파일되지 않습니다. 

42는 상수이기 때문에 변경할 수 없기 때문에 이 에러는 컴파일러에 의해 검출됩니다.

부울 마이부리안 = 진실의; 한다면 (마이부리안 = 무효) { /* ... */ } // 이로 인해 Null Pointer가 발생합니다.Java Runtime에서는 예외이지만 컴파일에서는 합법적입니다. 

일부 유형의 안전하지 않은 null 동작 방지

요다 상태는 상황에 따라 안전하지 않은 동작을 지원합니다.

스트링 myString = 무효; 한다면 (myString.동등.("푸바")) { /* ... */ } // 이로 인해 Null Pointer가 발생합니다.Java 예외 

요다 조건의 경우:

스트링 myString = 무효; 한다면 ("푸바".동등.(myString)) { /* ... */ } // 이것은 예상대로 False입니다. 

비판

요다 조건은 코드 [7][8][9]판독의 인지 부하를 증가시킴으로써 가독성을 훼손한다는 비판을 받는다.

일부 프로그래밍 언어(Swift, Kotlin 및 3.8 미만의 Python 버전 )에서는 조건 내에서 변수 할당을 허용하지 않습니다. 예를 들어 할당이 값을 반환하지 않도록 요구하거나 문법의 일부로 조건이 할당 문을 포함할 수 없는 불변성을 정의함으로써 이 오류는 불가능합니다.o (즉,[10] 프로그램이 런타임에 들어갈 수 있도록 허용되기 에 파서에 의해 구문 오류로 간주됩니다.많은 컴파일러가 다음과 같은 코드에 대한 경고를 생성합니다.if (myNumber = 42)(예: GCC) -Walloption warns warning this true value로 사용되는 할당 주위에 괄호를 표시함)을 지정하면 프로그래머에게 발생할 수 있는 실수를 경고합니다.JavaScript와 같은 동적 언어에서는 ESLint와 같은 린터가 조건 내의 [11]할당에 대해 경고할 수 있습니다.Python 3.8은 할당식을 도입했지만 walrus 연산자를 사용합니다.:=단순히 혼동하는 버그를 피하기 위해 정규 등호(=) 대신==와 함께=를 클릭합니다.[12]

늘 포인터 오류를 숨길 수 있고 프로그램 후반에만 나타나기 때문에 늘 동작을 회피하는 이점도 단점으로 간주할 수 있습니다.

==는 연산자이고 정의된 적절한 오버로드 연산자 함수가 없을 수 있기 때문에 비기본 유형을 비교할 때 C++에서 또 다른 단점이 나타납니다.예: Microsoft의CComBSTR라고 쓰여진 문자열 리터럴과 비교하다if (L"Hello" == cbstrMessage)는 과부하 [13]함수에 매핑되지 않습니다.

레퍼런스

  1. ^ "Coding Standards (Contributing to Symfony)". Symfony.com. Retrieved 12 November 2016.
  2. ^ "PHP Coding Standards Coding Standards Handbook". WordPress Developer Resources. Retrieved 25 July 2021.
  3. ^ Pullum, Geoffrey K. (18 May 2005). "Yoda's Syntax the Tribune Analyzes; Supply More Details I Will!". Itre.cis.upenn.edu. Language Log. Retrieved 22 December 2014. One way to look at Yoda's syntax is that it shows signs of favoring OSV syntax (Object-Subject-Verb) as the basic order in the simple clause.
  4. ^ "The StarWars.com 10: Best Yoda Quotes". starwars.com. Lucasfilm, Ltd. 26 November 2013. Retrieved 22 December 2014. When nine hundred years old you reach, look as good you will not.
  5. ^ "Quotes for Yoda (Character)". imdb.com. Amazon. Retrieved 22 December 2014. When nine hundred years old *you* reach, look as good *you* will not, hmm?
  6. ^ "Yoda Notation (aka Yoda Condition)—Origin of the term". 17 April 2013. Retrieved 26 December 2020.
  7. ^ Maioli, Christian (21 March 2017). "Quick tips for reducing the cognitive load of your code". HackerNoon. Retrieved 30 January 2022.
  8. ^ Paris, Grégoire (24 January 2020). "Why using Yoda conditions you should probably not be". DEV Community. Retrieved 30 January 2022.
  9. ^ Classic, Mike (16 August 2017). "Yoda Conditions: Why You Shouldn't Use Them". mikeclassic.ca. Retrieved 30 January 2022.
  10. ^ "Basic Operators — The Swift Programming Language (Swift 5.6)". docs.swift.org. Apple. Retrieved 30 January 2022.
  11. ^ "disallow assignment operators in conditional statements". eslint.org. Retrieved 29 January 2022.
  12. ^ Angelico, Chris; Peters, Tim; van Rossum, Guido (28 February 2018). "PEP 572 -- Assignment Expressions". Python.org. Retrieved 18 July 2021.
  13. ^ "CComBSTR Class". docs.microsoft.com. Microsoft. 3 August 2021. Retrieved 30 January 2022.

외부 링크