
Replit 사이트에서 코딩테스트 문제풀이를 하던 중...
아래와 같은 경고문구를 발견했다.
Yoda conditions are discouraged, use
a == 20instead
# (상황 예시)
a = 10
if (20 == a): # Yoda conditions are discouraged, use `a == 20` instead
print(a)
Yoda...? 요다는 스타워즈에 나오는 외계인 아닌가?
Yoda condition이란 뭘까?
Yoda Condition은 프로그래밍에서 조건문을 작성할 때, 실수로 할당 연산자(=)를 사용하는 것을 방지하기 위한 코딩 스타일 중 하나이다.
즉, 일반적인 조건문에서는 변수와 비교 연산자(==)를 사용하게 되는데,
좌 우 변수의 순서를 바꿔 실수를 줄이는 방법인 것이다.
간단한 C 언어 예시를 보자.
// case 1, 좌측 변수 + 비교 연산자 사용
int a = 10;
if (a == 20) {
printf("error!\n");
}
// 출력 결과
// (출력 없음)
// case 2, 좌측 변수 + 실수로 할당 연산자 사용
int a = 10;
if (a = 20) {
printf("error!\n");
}
// 출력 결과
// error!
// case 3, Yoda Condition + 비교 연산자 사용
int a = 10;
if (20 == a) {
printf("error!\n");
}
// 출력 결과
// (출력 없음)
// case 4, Yoda Condition + 실수로 할당 연산자 사용
int a = 10;
if (20 = a) {
printf("error!\n");
}
// 컴파일 단계에서 오류 검출
case 1과 3의 경우, 변수 순서와 상관 없이 정상적으로 동작하는 반면,
실수로 할당 연산자를 사용한 2와 4의 경우에서 차이를 보인다.
case 2의 경우, 조건문 내에서
a = 20
의 할당 과정을 거치게 되고,
C언어는 0 외의 값은 모두 참으로 다루므로 a라는 변수 자체가 참이 되어버려,
의도와는 달리 실행하면 안될 조건문을 실행하게 된다.
case 4의 경우, 상수에 값을 할당하려 하기 때문에
컴파일 과정에서 미리 오류를 검출할 수 있다.
Yoda Condition은 아래의 단점들 때문에 최근에는 권장되지 않는다고 한다.
코드를 글 읽듯이 자연스럽게 읽기 힘드므로 가독성이 하락된다.
팀 내에서 Yoda Condition을 사용할지 여부를 결정하고 이를 일관되게 유지해야 하지만, 현실적으로 이를 유지하기 힘들고 그로 인한 혼란이 가중될 수 있다.
매번 Yoda Condition으로 작성하기보다, 코드 정적 분석 도구를 사용하는 것이 훨씬 효율적이다.
최근에는 조건문 내 할당연산자 사용을 언어 자체에서 근본적으로 막고있다.
이러한 이유들 때문에
Yoda Condition은 더이상 권장되지 않으므로, 일반적인 조건문으로 작성하라
라는 권고가 뜬 것이었다.
어차피 python은 애초에 조건문 내 할당자 사용이 불가능하므로
Yoda condition을 적용할 필요가 없다!
궁금한건 ChatGPT에게 물어보자!
Yoda의 특이한 언어체계는 문장의 일반적인 순서를 바꾸는 특징을 가지고 있습니다. 예를 들어, 일반적인 영어 문장은 주어-동사-목적어(Subject-Verb-Object)의 순서를 따르지만, Yoda는 이를 반전시켜 말합니다. 이는 다음과 같은 예시로 확인할 수 있습니다.
일반적인 문장: "You must learn to trust your feelings."
Yoda의 언어체계: "To trust your feelings, you must learn."여기서 주어(You), 동사(must learn), 목적어(to trust your feelings)의 순서가 일반적인 영어 문장과는 다르게 배열되어 있습니다. Yoda는 이러한 독특한 말투로 유명하며, 이를 프로그래밍 용어로 가져와 "Yoda Condition"이라는 표현이 등장한 것입니다.
스타워즈 영화를 보지 않아 실제 대사가 어떤지는 모르겠지만, 아무튼 그렇다고 한다ㅎㅎ