문제
어쩌면 어리석은 질문일지도 모르지만 호기심이 더 커졌습니다.최근에 관계 연산자의 표현식 순서를 "역전"하는 것처럼 보이는 코드를 보았습니다. 예:
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#에서는 실수로 이 작업을 수행할 수 없으므로 별 문제가 되지 않습니다.