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)
같은 것을 의미하지는 않습니다 . 첫 번째는 cond
0이 아닌 경우에 해당됩니다 . 두 번째는 동일한의 경우에만 사실이다 true
C에서 (당신이 가지고있는 경우가있는 #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
위험한 지나치게 장황하고, 가난한 스타일이다. 다른 많은 언어에서는 이러한 비교가 위험하지는 않지만 여전히 지나치게 장황하고 스타일이 좋지 않습니다.