이 질문은 멍청하게 들릴지 모르지만, 0
평가 false
및 기타 [정수] 값 true
이 대부분의 프로그래밍 언어에 대한 이유는 무엇입니까?
문자열 비교
질문이 너무 간단 해 보이기 때문에 좀 더 설명해 드리겠습니다. 무엇보다도 프로그래머에게 분명해 보일 수 있지만 프로그래밍 언어가없는 이유는 무엇입니까? 나는 어디에서 0
평가 true
하고 다른 모든 [정수] 값을 false
? 그 말은 무작위로 보일지 모르지만, 좋은 생각이었던 몇 가지 예가 있습니다. 우선, 문자열의 3 방향 비교 strcmp
를 예로 들어 보겠습니다. 저는 C 를 예로 들어 보겠습니다. C를 모국어로 사용하는 프로그래머라면 다음 코드를 작성하려고 할 수 있습니다.
if (strcmp(str1, str2)) { // Do something... }
문자열이 같을 때 평가되는 strcmp
반환 0
값 때문에 false
, 초보 프로그래머가 시도한 것은 비참하게 실패하고 일반적으로 처음에 이유를 이해하지 못합니다. 더라면 0
으로 평가 true
하는 대신,이 기능은 가장 간단한 표현에 사용 된 수 - 위의 한 - 지 어떤지를 비교, 그리고에 대한 적절한 검사 때 -1
와 1
필요한 경우에만 수행되었을 것입니다. 우리는 대부분의 경우 반환 유형을 bool
(마음 속으로) 생각했습니다.
또한,의 새로운 유형을 소개하자 sign
, 그건 그냥 값을 사용합니다 -1
, 0
하고 1
. 꽤 편리 할 수 있습니다. C ++에 우주선 연산자 가 있고 그것을 원한다고 상상해보십시오 std::string
(글쎄, 이미 compare
기능이 있지만 우주선 연산자가 더 재미 있습니다). 선언은 현재 다음과 같습니다.
sign operator<=>(const std::string& lhs, const std::string& rhs);
0
에 대한 평가를 받았다 면 true
, 우주선 연산자는 존재하지 않았을 것이며, 우리는 operator==
그런 식으로 선언 할 수있었습니다 .
sign operator==(const std::string& lhs, const std::string& rhs);
이것은 operator==
한 번에 3 방향 비교를 처리했을뿐 아니라, 다음과 같은 점검을 수행하는 데 여전히 사용될 수 있습니다.
if (str1 == str2) { // Do something... }
오래된 오류 처리
이제 예외가 있으므로이 부분은 그러한 언어가 존재하지 않는 구 언어에만 적용됩니다 (예 : C). C의 표준 라이브러리 (및 POSIX 라이브러리)를 보면 0
성공하면 maaaaany 함수가 반환 되고 그렇지 않으면 정수가 반환되는지 확인할 수 있습니다 . 슬프게도 일부 사람들이 이런 종류의 일을하는 것을 보았습니다.
#define TRUE 0
// ...
if (some_function() == TRUE)
{
// Here, TRUE would mean success...
// Do something
}
프로그래밍에서 어떻게 생각하는지 생각하면 종종 다음과 같은 추론 패턴이 있습니다.
Do something
Did it work?
Yes ->
That's ok, one case to handle
No ->
Why? Many cases to handle
우리가 다시 생각해 보면, 그것은 유일한 중립 값을 넣어 감각을 만들었을 것입니다 0
,에을 yes
(그것은 C의 기능이 작동 방법) 다른 모든 값이 될 수있는의 많은 경우를 해결하는 동안, no
. 그러나 내가 아는 모든 프로그래밍 언어 (아마도 실험적인 esotheric 언어는 제외) 는 조건 에서 yes
평가되는 반면 모든 경우는로 평가됩니다 . "작동"이 하나의 사례를 나타내는 반면 "작동하지 않는"은 많은 가능한 원인을 나타내는 많은 상황이 있습니다. 우리가 그렇게 생각한다면, 평가 하고 나머지 는 훨씬 더 의미가있을 것입니다.false
if
no
true
0
true
false
결론
여기서 왜 우리가 언어를 설계 않은 : 내 결론은 본질적으로 내 원래의 질문 0
입니다 false
, 다른 값은 true
내 몇 가지 예 위 어쩌면 내가 좀 더 생각하지 않았다 계정에 복용?
후속 조치 : 많은 아이디어와 그에 대한 가능한 많은 이유가있는 많은 답변이 있음을 알게되어 기쁩니다. 나는 당신이 그것에 대해 얼마나 열정적 인 것 같아요. 나는 독창적 으로이 질문을 지었지만, 당신이 너무 열정적으로 보였으므로 조금 더 나아가서 Math.SE 에서 0과 1의 부울 선택의 근거 에 대해 질문 했습니다. :)
if true ; then ... ; fi
where where true
0을 리턴하는 명령이며이를 if
실행 ...
합니다.
bool
유형 만 비교 / 조건 등이 가질 수있는 경우 반환 값을.
strcmp()
3 개의 다른 값을 반환하므로 true 또는 false의 좋은 예는 아닙니다. 쉘 사용을 시작할 때 놀랍니다. 여기서 0은 true를 의미하고 다른 것은 false를 의미합니다.