조건부(삼항) 연산자를 평가하는 방법은 무엇입니까? [폐쇄]

조건부(삼항) 연산자를 평가하는 방법은 무엇입니까? [폐쇄]

모든 예에서 그것이 어떻게 작동하는지 보았습니다.

 condition?value = true:value = false

실제로 어떻게 작동하는지 확인하지 못했습니다. 이 작동 모드를 사용하면 거의 명확하게 설명할 수 있습니다.

Short-circuit evaluation

 As logical expressions are evaluated left to right, they are tested
 for possible "short-circuit" evaluation using the following rules:

false && anything is short-circuit evaluated to false.
true || anything is short-circuit evaluated to true.

단락이라는 용어는 실제로 무엇을 의미합니까?

?:의 왼쪽도 같은 결론으로 ​​이어지는가? && 및 ||와 같습니다. 이것이 오른쪽인가요? 단락(실패)하므로 :의 오른쪽으로 이동한 다음에는 실패하지 않습니다. 대신 작업을 완료합니다.

단락이라는 단어를 명확하게 이해하지 못하기 때문에 혼란스럽습니다.

내가 아는 건 이것뿐이다.

반환 값이 0, true 또는 yes인 경우에 작동합니다.

if true && then do this

왼쪽의 반환 값이 0이 아니면 실패합니다.

if false || then do this

왼쪽의 반환 값이 0이면 실패합니다.

이러한 이해를 바탕으로 다시 질문을 제기합니다.

조건부(삼항) 연산자는 동일한 방식으로 평가하고 동일한 방식으로 작동합니까?

문제를 증명하기 위해 분해해야했습니다.

false ? anything is short-circuit evaluated to false.
true : anything is short-circuit evaluated to true.

로 해석되는 것 같습니다.

 !true ? then fail 
  true : then fail 

또는

  true ? then no failure 
  false : then no failure 

?의 가장 왼쪽에서 끝납니다.

 hypothesis ? conclusion true : conclusion false

논리연산자도 마찬가지

 hypothesis &&  conclusion true operation preformed

 hypothesis || conclusion false operation preformed

모두 동일한 접근 방식을 사용합니까?

두 개의 논리 연산자는 하나의 조건부(삼항) 연산자로 처리됩니다.

3개 모두 논리 연산자인가요?

나는 문제에 대한 모든 진실을 얻을 수 있도록 내가 아는 모든 프로그래밍 언어로 태그를 지정했습니다.

이것에 대해 누구도 혼동하지 않기를 기도합니다. 네, 그렇다면 이것은 제가 혼란스러워서일 수도 있습니다.

답변1

"단락"은 다음과 같은 표현이 있는 경우를 의미합니다.

( something evaluating to false) && (something else)

아무것도 실행하지 않습니다 . 항상 false이므로 (something else)즉시 종료됩니다 .false && anything

비슷하게:

(something evaluating to true ) || (something else)

(something else)조건이 이미 참이기 때문에 평가할 필요가 없습니다 .

삼항 연산자의 경우 이는 A ? b : c 단지 A부울 표현식일 뿐입니다. 해당 값에 따라 b평가 c됩니다( true b이면 그렇지 않으면 ). 따라서 여기에서는 and 연산자와 같이 "단락"이 발생하지 않습니다 . 둘 다 동시에 실행되는 경우는 없으며 항상 둘 중 하나입니다.Ac&&||bc

삼항을 if-else 문으로 생각하면 도움이 될 수 있습니다. 위의 예에서는 Ais 조건식, bis then절, cis else절이 있습니다. 유일한 차이점은 전체 삼항 표현식이 참인지 거짓 인지에 따라 bor 값을 생성한다는 것입니다 .cA

C언어의 예입니다. 숫자가 N짝수인지 홀수인지 알려주는 문자열을 원한다고 가정해 보겠습니다 .

char *result = ((N % 2) == 0) ? "even" : "odd";

다음은 "단락"을 통해 이를 수행하는 한 가지 방법입니다(매우 좋은 스타일은 아니지만 개념을 보여줍니다).

char *result = "even";
((N % 2) == 0) || (result = "odd");

마지막 예에서 N짝수인 경우 "홀수"에 대한 할당이 단락됩니다. 식이 평가되지 않고 다음과 같은 경우 결과가 이미 true로 알려져 있으므로 할당이 발생하지 않습니다. 도착하면 ||결과는 "균등"으로 유지됩니다.

답변2

"단락"은 결과가 명확해지면(평가 순서에 따라) 모든 추가 평가를 건너뛰는 것을 의미합니다.

For ||및 this 수단 은 피연산자가 왼쪽에서 오른쪽으로 평가되고 true 또는 d의 결과가 true이기 때문에 호출 &&에서 건너뜁니다 .x = (true || send_mail())send_mail()

삼항 연산자의 경우 "단락"이라는 용어는 논리 연산자에 대한 왼쪽에서 오른쪽 평가 순서가 없기 때문에 더 넓은 의미로 사용될 수 있습니다. 여기서의 개념은 "지연 평가"라고 더 정확하게 불립니다. 이는 단순히 조건을 평가한 후 다음을 의미합니다.오직경기의 '결론' 부분을 평가합니다.

그러니 x = (ask_user() ? try_send_mail() : try_send_letter())그냥 실행해try_send_mail() 또는 try_send_letter()그러나 결코 동시에 둘 다는 아닙니다.

관련 정보