모든 예에서 그것이 어떻게 작동하는지 보았습니다.
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 연산자와 같이 "단락"이 발생하지 않습니다 . 둘 다 동시에 실행되는 경우는 없으며 항상 둘 중 하나입니다.A
c
&&
||
b
c
삼항을 if-else 문으로 생각하면 도움이 될 수 있습니다. 위의 예에서는 A
is 조건식, b
is then
절, c
is else
절이 있습니다. 유일한 차이점은 전체 삼항 표현식이 참인지 거짓 인지에 따라 b
or 값을 생성한다는 것입니다 .c
A
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()
그러나 결코 동시에 둘 다는 아닙니다.