문제

어쩌면 어리석은 질문일지도 모르지만 호기심이 더 커졌습니다.최근에 관계 연산자의 표현식 순서를 "역전"하는 것처럼 보이는 코드를 보았습니다. 예:

if (0 == someVariable)

내가 일반적으로 보고 쓰는 것과는 반대로:

if (someVariable == 0)

나에게는 두 번째 방법이 더 읽기 쉽고 직관적인 것 같은데, 첫 번째 방법을 보고 있는 이유가 있는지 궁금합니다.논리적으로 두 진술은 모두 동일한 결과로 평가됩니다. 따라서 작성 방법은 개인 취향의 문제일까요?

도움이 되었습니까?

해결책

나는 이것이 개인적인 취향이라는 것을 이해합니다.변수를 두 번째로 배치하면 개발자가 걱정했던 변수에 실수로 상수를 할당하지 않도록 할 수 있습니다.이것이 아마도 개발자가 언어를 전환할 때 C#에서 이를 보는 이유일 것입니다.

다른 팁

그러나 주문은 중요하지 않지만, 전자는 당신이 확인하는 0임을 암시합니다.관례는 후자의 사용을 규정합니다.

C와 C++의 가장 큰 이유는 타이핑이 쉽기 때문이다.

if (someVariable = 0) {
    ...
}

항상 실패하고 설정됩니다. someVariable 0으로.

저는 개인적으로 변수 우선 스타일을 더 선호합니다. 왜냐하면 더 자연스럽게 읽혀지기 때문입니다. 그리고 꼭 사용하는 것을 잊지 않기를 바랍니다. == ~ 아니다 =.

많은 C 및 C++ 컴파일러는 내부에 상수를 할당하면 경고를 표시합니다. if.Java 및 C#에서는 부울이 아닌 표현식을 금지하여 이 문제를 방지합니다. if 조항.Python은 표현식이 아닌 명령문으로 할당을 수행하여 이 문제를 방지합니다.

첫 번째 방법은 IF 문에서 할당을 수행하지 않도록 자신을 상기시키는 방법으로 존재합니다. 이는 일부 언어(C/C++)에서 재앙적인 결과를 초래할 수 있습니다.C#에서는 부울을 설정하는 경우에만 이 문제가 발생합니다.

잠재적으로 치명적일 수 있는 C 코드:

if (succeeded = TRUE)
{
    // I could be in trouble here if 'succeeded' was FALSE
}

C/C++에서는 VAR == CONSTANT를 의도한 경우 모든 변수가 VAR = CONSTANT 문제에 취약합니다.따라서 이를 실수할 경우 컴파일 오류가 발생하도록 IF 문을 재정렬하는 것이 관례인 경우가 많습니다.

if (TRUE = succeeded)
{
    // This will fail to compile, and I'll fix my mistake
}

C#에서는 if 문에서 부울 표현식만 유효하므로 부울만 이에 취약합니다.

if (myInteger = 9)
{
    // this will fail to compile
}

따라서 C# 세계에서는 익숙하지 않은 경우 CONSTANT == VAR 스타일을 채택할 필요가 없습니다.

평등 외에도 나는 종종 다음과 같은 코드를 접합니다.

if (0 > number)

또는

if (NULL != pointer)

C/C++에서는 실수할 위험조차 없습니다!이는 선의의 교수법이 단순한 나쁜 습관으로 변한 상황 중 하나입니다.

후자 형식은 C 구문에서 남은 형식으로, 실수로 등호 중 하나를 생략한 경우 비교 대신 할당을 수행했습니다.

그러나 물론 숫자 리터럴에는 할당할 수 없으므로 두 번째 예와 같이 작성하면 버그가 아닌 컴파일러 오류가 발생합니다.

그러나 C#에서는 실수로 이 작업을 수행할 수 없으므로 별 문제가 되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top