2013-06-26 2 views
0

죄송합니다. 내 질문을 공식화하는 더 좋은 방법을 생각할 수 없어 복제본이 될 수 있습니다. 나는 사전에 사과한다. 일반적으로 저는 이것을 직접 테스트 할 것이지만 현재 프로그래밍 할 수없는 워크 스테이션에 있습니다. 함수가있는 조건으로 인해 도달하지 않은 코드가 발생할 수 있습니까?

우리가 출력 내가 testFunctions를 호출 할 때이 될 것입니다 무엇 다음 코드

public void testFunctions() 
{ 
    if(someFunction1() && someFunction2()) 
    { 
     Console.WriteLine("I will never get here."); 
    } 
} 

private bool someFunction1() 
{ 
    Console.Write("Obviously I got here"); 
    return false; 
} 

private bool someFunction2() 
{ 
    Console.WriteLine(", but will I ever get here?"); 
    return false; 
}  

을 말해봐?

Obviously I got here 

또는 :

Obviously I got here, but will I ever get here? 
+1

C#에서는 "분명히 여기 있습니다"라는 메시지가 나타나고 두 번째 조건에 도달하지 않습니다. 따라서 null 값을 확인해야하는 경우 먼저 그렇게합니다. 그러나 모든 언어에서는 그렇지 않습니다. 예를 들어 Javascript는 두 조건을 모두 실행합니다. –

+0

자바 스크립트는 두 가지 조건을 모두 실행합니까? 나는 그것을 의심한다.어쩌면 그것도 js 엔진에 의존적이긴하지만 적어도 chrome (v8 엔진)에서는 첫 번째가 false로 평가되면 '&&'표현식에서 두 함수를 모두 실행하지 않습니다. –

+0

또한, 내가 아는 한, 자바 스크립트에서 정확히 C#에서와 동일합니다 - 당신은 또한 항상 표현의 양쪽을 실행하는'&'연산자를 사용할 수 있습니다. –

답변

2

난 당신이 기본적으로 요구하는지 생각 &&단락 여부. 첫 번째 연산이 false으로 평가되면 두 번째 피연산자는 계산되지 않습니다. 이것은 언어 사양에 의해 보장됩니다. 그 y이 평가 제외

  • x && y 조작 x & y에 대응하는 동작, 상기 C# 5 규격의 섹션 7.12에서 :

    &&|| 연산자는 &| 연산자 조건 버전은 xfalse이 아닌 경우에만 xtrue이 아닌 경우 그 y 제외

  • x || yx | y 조작에 대응하는 조작 만 평가된다.

는 ("분명히 내가 여기 있어요") 첫 번째가 표시됩니다

1

(나는 부분 완전성에 대한 ||을. 포함). 첫 번째 메소드가 false를 반환하면 if 문의 두 번째 부분은 평가되지 않습니다. 표현식 또는 표현식이면 두 번째 부분이 평가되고 두 ​​번째 출력이 화면에 표시됩니다.

1

는 "분명히 내가 여기있어"있을거야?

매우 간단합니다. 연산자 '& &'은 true를 반환하기 위해 두 결과가 모두 true 여야합니다. 그리고 첫 번째 조건이 이미 통과하지 않은 경우 두 번째 조건을 확인할 필요가 없습니다.

그러나 '&'연산자는 두 함수를 모두 호출한다는 점을 제외하고는 거의 동일합니다.