포스와 함께 나타나는 것을… 요다 기법에 대해서

유명한 프로그래밍 기법 중 하나는 "요다 기법"이라고 불리는 기법입니다.


스타 워즈에 나오는 그 요다입니다.

예를 들어, 이런 if문이 있다고 합니다.
변수 value 의 값이 100 인가 어떤가를 판정하는 if 문입니다.
if(value == 100) { 
  // valueが100のときにする処理
} 

요다 기법에서는 이것을 다음과 같이 씁니다. if의 괄호 안에 주목하십시오.
if(100 == value) { 
  // valueが100のときにする処理
} 

if의 괄호 안이 if(value == 100)에서 if(100 == value)로 변경되었습니다.

요다 기법에서는, 정수(100)와 변수( value )를 도치시켜서 기술합니다.

즉, 순서를 바꾸는 것입니다.

처리 결과는 모두 동일하다. 하지만...



두 예제는 두 가지 방법으로 실행하더라도 결과는 동일합니다.

일반적으로는 if(value == 100) 라고 쓰는 사람이 대다수라고 생각합니다.

그렇지만, 그 쓰는 방법이라고 이런 실수를 해 버리는 일이 있습니다.
/*  "==" が "="になってる! */
if (value = 100){
  // 処理
}
value100 를 비교하고 싶은데, 이것은 value100 라는 값을 대입해 버리고 있습니다.

그러나이 코드는 컴파일이 통과합니다. 아무런 오류도 내뱉지 않습니다.

왜냐하면, value=100 는 “변수 value에 값 100을 대입한다”라고 하는 처리로서 성립해 버리고 있기 때문입니다.

그렇지만, 요다 기법으로 같은 실수를 해 버렸을 때는 어떨까요?
/*  "==" が "="になってる! */
if (100 = value){
  // 処理
}

이 경우 컴파일러가 제대로 오류를 뱉습니다.

왜냐하면, 100=value 따위 처리는 무리입니다.

즉 무슨 말을 하고 싶은가 하면…

요다 기법 쪽이 실수를 미연에 방지한다는 것입니다.

그러나, 기술은 진보하고 있다…



요다 기법은 컴파일러가 간과하는 실수를 막을 수 있습니다.

그러나 현대 컴파일러는 if (value = 100) 와 같은 if 안에 대입 처리가 들어간 설명을 찾으면 경고를 줍니다.
if(value = 100) { }...
// Using the result of an assignment as a condition without parentheses ←コンパイラによる警告

요다 기법을 사용하지 않아도 컴파일러가 오류를 알게 되었습니다.

불쌍한 요다 기법…


지금은 더 이상 사용할 필요가 없는 기법입니다만, 정수와 변수를 도치시킨다고 하는 선인들의 발상 그 자체는 견습해야 한다고 느꼈습니다.

좋은 웹페이지 즐겨찾기