2009-06-16 9 views
1

나는 이걸 보아 왔지만, 이유에 대한 명확한 설명을 듣지 못했습니다 ... 이것은 C#이나 VB.NET 또는 Perl이 아닌 모든 언어에 대한 것입니다.비교할 항목의 순서는?

두 항목을 비교할 때 "확인"값이 오른쪽 대신 왼쪽에 놓이는 경우가 있습니다. 논리적으로 나에게 먼저 변수를 나열한 다음 비교할 값을 나열합니다. 그러나 "상수"가 먼저 나열된 반대면을 보았습니다.

이 방법에는 어떤 이점이 있습니까?

그래서 대신 :

if (myValue > 0) 

내가 본 :

if (null != Object.GimmeAnotherObject()) 
,691 :

if (0 < myValue) 

또는

if (Object.GimmeAnotherObject() != null) 

가 대체됩니다

이것에 대한 아이디어?

TIA! 케빈

+0

내가 C 언어 또는 특정 언어를 할당 한 것으로 생각한다. – Paco

답변

8

일부 개발자는에 상수는 0 값을 할당 할 수 없기 때문에 당신이 컴파일러에서 오류가 발생합니다 때문에 그렇게

if(0 = myValue) 

이처럼 왼쪽했습니다. 대신,

if(myValue = 0) 

를 입력하기 때문에,

if(0 == myValue) 

이 도로 아래로 고통스러운 디버깅을 많이 방지로 변경해야 할 것은 완벽하게 합법적하지만

if(myValue == 0) 
을 의미 가능성이 높습니다

첫 번째 선택은 원하는 것이 아닙니다. 그것은 미묘하게 프로그램을 변경하고 모든 종류의 두통을 일으킬 것입니다. 명확하게하는 희망!

C에서
+0

많은 새로운 언어에서 (myValue = 0) myValue = 0은 유효한 코드가 아니며 숫자로 평가되는 경우 if()는 조건으로 숫자를 사용할 수 없습니다. –

+0

@David 의사 코드의 세계에 오신 것을 환영합니다. – samoz

2

나는 상수도 또는 상수와 같은 단순한 규칙은 매우 현명한 선택이 아니라고 생각합니다. 나는 그 수표가 의미론을 표현해야한다고 생각한다. 예를 들어 범위 검사에서 두 버전을 모두 사용하는 것을 선호합니다.

if ((low <= value) && (value <= high)) 
{ 
    DoStuff(value); 
} 

는하지만 난 당신이 언급 한 예에 동의 - 나는 것하지만 일정 마지막으로 그것에게 다른 방법을 수행하기위한 더 obviouse 이유를 볼 수 있습니다.

if (object != null) 
{ 
    DoStuff(object); 
} 
2

++이 두 가지가 유효하고

if(x == 1) 

if(x=1) 

를 컴파일하지만 당신은이

if(1==x) 

if(1=x) 
처럼 작성하는 경우 0

1에 대한 지정이 잡히고 코드가 컴파일되지 않습니다.

왼쪽에 const 변수를 두는 것이 안전하다고 생각합니다. 당신이뿐만 아니라 평등 검사에

1

그것의 코딩 연습을 보여주는 볼 이유

당신이 작업의 기본 모드되는 경향이 과제에 대한 왼쪽에있는 CONST 변수를 넣어하는 습관을 일단은, 그건 예를 들어 '='과 같이 타이핑 된 '! ='과 같은 오타를 포착 할 수 있습니다.

왼쪽에 상수가있는 경우 상수에 할당 할 수 없기 때문에 모든 할당 연산자가 컴파일러에 의해 포착됩니다.

많은 언어 (특히 C)는 코드를 작성할 때 많은 유연성을 허용합니다. 동안은, 왼쪽의 일정은 또한 함께 프로그램 할당 및 조건문이

if (var1 = (var2 & var3)) { /* do something */ } 

로이 코드는 또한 var1에 부울 결과를 얻을 것입니다 수 있습니다, 당신에게 특별한 것/* 결과가 */경우 뭔가를 할 참된.

관련 코딩 연습은 조건식에 할당이있는 코드를 작성하는 것을 피하는 것입니다. 프로그래밍 언어는 그런 것을 허용하지만. 조건문 내의 할당이 일반적이지 않으므로 일반적인 코드에는 그런 것이 없습니다. 그런 코드를 많이 사용하지 마십시오.

IBM DeveloperWorks 사이트에 좋은 언어 코드 작성 사례 (C)가 있습니다.이 사이트는 아마도 해당 언어로 작성하는 사람들과 관련이 있습니다.

.NET 용
+0

여기에 조건부를주의 깊게 읽어야합니다. 예를 들어 첫 번째 읽기에서 var1이 실제로 비트와 결과를 얻는 것을 관찰했습니다.그리고 그러한 결과는 0이 아니면 TRUE입니다. – nik

+0

읽기 쉽고 디버깅 할 수있는 코드를 작성하면 이러한 속임수를 피할 수 있습니다. 스턴트가 코드의 효율성에 초점을 맞추고, '서예'에서는 그렇지 않아야합니다 :-) – nik

2

,이 컴파일러는 같은 조건에서 할당을 만들어 보자하지 않으므로, 무관의 :

if(x=1) 

(다른 사람들이 말했듯이)가 놓치기 쉬운 있기 때문에 (나쁜 습관이다 때문에).

일단 걱정할 필요가 없으면 먼저 변수와 두 번째 값을 넣는 것이 약간 더 읽기 쉽지만 그 차이 만 있습니다. 양면을 평가해야합니다.