2012-09-24 15 views
0

가능한 중복은 :
How to check for equals? (0 == i) or (i == 0)
Is there a difference between i==0 and 0==i?사용하는 경우?

나는 사람들이 if(condition)if(0==x) 대신 if(x==0)로를 사용하여 많은 시간을 보았다. 그것은 좋은 연습이라고하지만 다른 사람이 이유를 설명 할 수 있을까요? 그게 무슨 차이가 있니? 오히려 제 의견으로는 가독성을 떨어 뜨립니다.

+0

== 대신 =를 사용하는 실수를 저 지르려고 시도하십시오 (또한 0 이외의 다른 경우와 비교하는 경우도 생각해보십시오). – PlasmaHH

+1

그것은 좋은 연습이 아니라 공룡 연습입니다. 1990 년 이전에 프로그램을 작성한 사람들은 똑똑하다고 생각하면서 이와 같은 코드를 작성했습니다. 1990 년 볼랜드는 "잘못된 할당 가능성"에 대한 경고를 제기 한 컴파일러를 발표했습니다. 이후 모든 컴파일러는 이에 대한 경고를합니다. 난독 화 코드를 작성하는 것은 나쁜 해결책이며 적절한 정적 검사 도구를 사용하는 것이 더 좋고 현대적인 아이디어입니다. – Lundin

+0

평등이 (나를 포함하여) 다른 방향으로 코드를 읽는 데 더 어려움을 겪는 사람들은 "동등한"것이 무엇을 의미하는지 제대로 이해하지 못할 수도 있음을 명심해야합니다. 따라서'0 == x' 코드는 독자가 추측에 대해'x == 0' 코드를 해석하는 범위에서만 난독 화됩니다. 인간이 빨리 읽는 방법을 고려할 때 상당한 양이지만, 프로그래머가 평균 텍스트를 읽는 것보다 코드를 읽는 것이 적기를 바랍니다. –

답변

10

가독성이 저하된다는 사실은 전적으로 주관적인 것입니다. (나는 같은 방식으로 느낀다. 그러나 그것은 내가 다른 말보다 더 많이 x==0을 다루었 기 때문에 나온 것이다. 그래서 익숙해졌다.)

if(x=0) 

는하지 않습니다,

if(0=x) 

는 컴파일러 오류를 얻을 것이다 :

우발적 인 할당을 방지하기 위해 이루어집니다.

0

예, 덜 읽기 (IMHO)하지만,이 대신 ==

if(0 = variable) { // Fail 0 is constant 

재미있는 사실을 확인의 할당과 일반적인 실수를 방지 할 수 있습니다 : 어떤이 "요다 조건"

0

없음을 호출, 변수 이름을 왼쪽에, 상수를 오른쪽에서 읽는 것이 습관입니다. 그러나 실제로 당신이 떠나면 것을 당신에게 정확한 코드를 제공합니다

(0 =의 X)

대신

(0 == x를) 실수로 그러면 그것은 당신에게 오류가 발생한다면 쉽게 수정할 수 있지만 반대로 디버그하기는 매우 어렵습니다.

1

if (a == 0) 대신 if (a = 0)을 입력하면 타이핑 실수를 피할 수 있습니다. 당신이 if (0 = a) 대신 if (0 == a) 쓴 경우 요다 스타일을 사용하면 컴파일 오류를 얻을 것입니다.

다른 한편으로는 if (b = a)b의 경우를 방지하지 못합니다. 은색 탄환은 없습니다.

더 나은는 컴파일 할 때 -Wall -Wextra을 사용하는 것입니다. 편집증이 있고 모든 경고를 오류로 취급하려면 -Werror을 추가하십시오 (이 방법을 사용하는 것이 더 좋습니다).

+0

'b'가 상수이면'if (b = a)'를 막습니다. 어떤 것이'0'인지, 그래서 똑같은 것입니다 ... –

+0

아이디어는'b'가 다른 변수 여야한다는 것이 었습니다. 이제 해결되었습니다. –

+0

예. 'const B b; '는 const 변수이고'if (b = a)'는 실패합니다. : D –

2

개인적으로이 연습을 선호하지 않습니다. 그러나 때문에 다음과 같은 이유로 인기가되었다 :

assignment operator 및 부울 조건을 구별하기.X에

  1. 를 할당 0

    if(x = 0) 
    

    라인이 두 purpsose를 제공. 는 이러한 실수를 방지하려면 if(0)

에 해당 원인

  • 이 조건 false하게, 어떤 사람들은 컴파일시 오류가 발생합니다 if(0 = x)을 선호합니다.