스타 사가의 에피소드 V 출시 40주년을 기념하여 Star Wars 및 Java/JavaRush의 모든 팬에게 짧은 게시물을 바칩니다! 가끔 인터넷에서 흥미로운 것들을 많이 찾을 수 있는데, 얼마 전 저는 Yoda Conditions 라고 불리는 언뜻 보기에 꽤 재미있는 프로그래밍 방법을 발견했습니다 . 간단히 말해서, Yoda 조건(또한 Yoda 표기법)은 조건문에서 친숙한 비교 표현식의 두 부분이 반전되는 프로그래밍 스타일입니다.
9개 6개 부분 을 모두 마라톤으로 시청한 후 우리가 잠도 자지 않고 앉아 애완동물 프로젝트를 위한 코드를 작성하고 다음을 작성하는 가상의 상황을 가정해 보겠습니다 .
if (5 == a) {
// do something
}
이 스타일은 C와 유사한 구문을 사용하는 언어에서 사용할 수 있으며, 대부분 및 표현식에서 사용 if
됩니다 while
.
if (0 == variable) {
// do something
}
while (false == endingCondition) {
// do something
}
상수 표현식을 비교 연산자의 왼쪽으로 이동하는 이유는 무엇입니까? Saga의 void checkNumber(int a)
{
if (a = 13) // Здесь-то и появляется так называемый unexpected behavior!
{
printf("Number is 13");
}
}
이 경우 프로그램을 실행할 때마다 메소드에 Number is 13"
전달된 인수에 관계없이 문자열을 받게 됩니다 . 이것은 우리가 기대했던 것이 아닙니다! 초보 프로그래머들 사이에서는 논리적 오류가 꽤 자주 발생할 수 있습니다. (저를 믿으세요. 저도 알고 있습니다.) 그러나 컴파일 단계에서 13 = a와 같은 코드는 오류를 생성합니다. 정수 값은 상수이고 그에 따라 변경("a"로 전환)할 수 없기 때문에 우리는 확실히 간과하지 않을 것입니다. а
checkNumber(int a)
Yoda의 조건을 사용하는 데에는 장단점이 있습니다.
라이트 사이드:
-
목표가 비교일 때 변수에 대한 할당을 방지합니다.
-
안전하지 않은 "Null Behavior" 문제 해결(
NullPointerException
) // Wikipedia의 예
요다 없이:
String myString = null;
if (myString.equals("foobar")) { /* ... */ }
// This causes a NullPointerException in Java
요다와 함께:
String myString = null;
if ( "foobar".equals(myString) ) { // Результат - Ложь
/* не выполняется */
}
어두운면:
- 귀하의 코드를 보는 사람들의 코드 가독성은 더욱 복잡해지며, 코드 인식에 대한 부담이 늘어납니다.
- 좁은 범위, 같음 비교 또는 상수와의 비교만 사용되며 null을 확인합니다.
- 많은 컴파일러는 이미 이러한 종류의 오류를 "확인"하고 잠재적인 오류가 있는지 미리 경고합니다.
GO TO FULL VERSION