C와 일부 유사한 언어에서,에 평등에 대한 부울 표현식을 비교 false하거나 true위험한 습관이다.
C에서는 스칼라 표현식 (숫자 또는 포인터)을 예를 들어 if명령문 의 조건으로 부울 컨텍스트에서 사용할 수 있습니다 . 는 C 규칙 즉 if (cond)동일하다 if (cond != 0)제로가 false, 즉,과 - 어떤 아닌 값은 true입니다. 경우 cond포인터 형이고, 0널 포인터 상수로 취급되고 if (ptr)의미 if (ptr != NULL)합니다.
이것은
if (cond)
과
if (cond == true)
같은 것을 의미하지는 않습니다 . 첫 번째는 cond0이 아닌 경우에 해당됩니다 . 두 번째는 동일한의 경우에만 사실이다 trueC에서 (당신이 가지고있는 경우가있는 #include <stdbool.h>) 단순히 1.
예를 들어,에 isdigit()선언 된 함수는 인수가 숫자 인 경우 값 을 <ctype.h>반환하고 그렇지 않으면 0이 아닌 int값 을 반환합니다 0. 42조건이 true임을 나타 내기 위해 리턴 할 수 있습니다 . 비교 42 == true가 실패합니다.
그것이 0거짓으로 간주되는 유일한 값이기 때문에 평등에 대한 비교 false가 효과가 있습니다. if (!cond)와 if (cond == false)같은 일을한다. 그러나 당신이 그것을 이용하려면, 비교 false는 괜찮고, 비교 true는 그렇지 않다는 것을 기억해야 합니다. 최악의 경우와 비교하면 대부분의 시간 동안true 작동 합니다 (예를 들어, 평등 및 관계 연산자는 항상 0또는을 산출합니다 1). 이것은 이것을 사용하여 당신이 도입 한 모든 버그를 여전히 추적하기 어려울 수 있음을 의미합니다. (걱정하지 말고 중요한 클라이언트에게 코드를 데모하자마자 표시됩니다.)
C ++에는 약간 다른 규칙이 있습니다. 예를 들어, 해당 bool유형은 언어에 좀 더 밀접하게 통합되어 type으로 if (cond)변환 cond됩니다 bool. 그러나 그 효과는 (대부분) 동일합니다.
일부 다른 언어에는 더 나은 동작 부울이라고 부르는 언어가 있으며 그 cond == true와 같은 cond == false구문은 안전합니다. 그럼에도 불구하고 내가 본 모든 언어에는 not또는 !연산자가 있습니다. 거기에 있으므로 사용할 수도 있습니다. 사용 cond == false하기보다는 !cond나 not cond, 내 의견으로는, 가독성이 향상되지 않습니다. ( !캐릭터가 한 눈에보기 어려울 수 있다는 것은 사실입니다 . 때때로 !이것을 피하기 위해 공백을 추가합니다 .)
그리고 자주 문제를 피할 수 와 약간의 코드를 재 배열하여 선명도를 향상시킬 수 있습니다. 예를 들어,
if (!cond) {
do_this();
}
else {
do_that();
}
당신은 쓸 수 있습니다 :
if (cond) {
do_that();
}
else {
do_this();
}
그게 아니라 항상 더 나은,하지만 그것이 기회를 찾기 위해 다치게하지 않습니다.
요약 : C 및 C ++, 평등 비교에서에 true와 false위험한 지나치게 장황하고, 가난한 스타일이다. 다른 많은 언어에서는 이러한 비교가 위험하지는 않지만 여전히 지나치게 장황하고 스타일이 좋지 않습니다.