3 대 운영자는 어떻게 작동합니까?
-
19-08-2019 - |
문제
Ternary Operator가 일반 if/else 블록과 어떻게 작동하는지 보여주십시오. 예시:
Boolean isValueBig = value > 100 ? true : false;
정확한 복제 : Ternary Operator를 어떻게 사용합니까?
해결책
Boolean isValueBig = ( value > 100 ) ? true : false;
Boolean isValueBig;
if( value > 100 ) {
isValueBig = true;
} else {
isValueBig = false;
}
다른 팁
3 원조와 IF/다른 경우의 차이점은 3 원 표현이 값으로 평가하는 진술이지만 IF/Else는 그렇지 않다는 것입니다.
예제를 사용하려면 3 배 표현식 사용에서 if/else로 변경하십시오.이 문장을 사용할 수 있습니다.
Boolean isValueBig = null;
if(value > 100)
{
isValueBig = true
}
else
{
isValueBig = false;
}
그러나이 경우 귀하의 진술은 다음과 같습니다.
Boolean isValueBig = (value > 100);
C ++를 처음 접했을 때이 구성을 다음과 같이 읽는 데 도움이된다는 것을 알았습니다.
Boolean isValueBig = if condition ? then x else: y;
(이것은 유효한 코드가 아니라는 점에 주목하십시오. 그것은 내가 머리 속에서 읽도록 훈련 한 것입니다.)
Boolean isValueBig;
if (value > 100)
{
isValueBig = true;
}
else
{
isValueBig = false;
}
Boolean isValueBig;
if(value > 100) { isValueBig = true; } else { isValueBig = false; }
나는 그것이 읽기가 어렵다고 생각했기 때문에 Ternary Operator의 팬이 아니 었습니다. 그렇게되면 Jon Skeet과 그의 책, C# 깊이 마침내이 오래된 개를 머리 위로 치고 가라 앉게했습니다. 존은 말했다.
값> 100?
"예 아니오"
이제 맹인이 볼 수 있습니다.
이것이 당신이 그것을 두 번째 자연으로 만드는 데 도움이되기를 바랍니다.
인용 된대로 ? : 운영자 MSDN 페이지, "조건부 연산자 (? :)는 부울 표현식의 값에 따라 두 값 중 하나를 반환합니다."
따라서 3 원 운영자를 사용하여 부울 이상의 것을 반환 할 수 있습니다.
string result = (value > 100 ) ? "value is big" : "value is small";
PHP 예
<?php
// Example usage for: Ternary Operator
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// The above is identical to this if/else statement
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
"표현식 (expr1)? (Expr2) : (Expr3) 평가합니다 expr2 만약에 expr1 평가합니다 진실, 그리고 expr3 만약에 expr1 평가합니다 거짓."
Java의 True/False 부품의 유형을 혼합하지 않도록하십시오. 이상한 결과를 낳습니다 :-(
나쁜 예, 쉽게 글을 쓸 수 있기 때문입니다
Boolean isValueBig = value > 100 ? true : false;
처럼:
bool isValueBig = value > 100
그 외에도 다른 모든 사람들은 이미 대답했습니다. 평가중인 것은 이미 부울 값이기 때문에 3 원 운영자를 사용하여 BOOL 값을 설정하는 것이 좋습니다.
나는 그것이 단지 예일 뿐이라는 것을 알고 있지만, 지적 할 가치가있었습니다.
다른 사람들은 이미 대답했지만 여기에 Ternary의 사용에 대해 정말로 알아야 할 사항이 있습니다.
어떤 값의 가능한 변형에 대해 다른 객체를 반환 해야하는 코드 조각이 있다고 가정하자. Simpliticy의 사케 1과 5 사이의 정수를 위해 코드는 다음과 같이 보인다.
if(i==1) {
return new ObjectOne();
} else if(i==2) {
return new ObjectTwo();
} else if(i==3) {
return new ObjectThree();
} else if(i==4) {
return new ObjectFour();
} else if(i==5) {
return new ObjectFive();
} else {
return new DefaultObject();
}
이해하기 쉽지만 조금 무겁습니다. 부터 3 대는 If..ELSE 진술을 작성하는 또 다른 방법입니다. 이것에 다시 활성화 될 수 있습니다
return (i==1) ? new ObjectOne() :
(i==2) ? new ObjectTwo() :
(i==3) ? new ObjectThree() :
(i==4) ? new ObjectFour() :
(i==5) ? new ObjectFive() : new DefaultObject();
라고 불린다 중첩 된 3 개. 그것은 사악합니다. 이제 당신은 그것에 대해 알았으므로 절대 사용하지 마십시오. 위의 사례와 같은 용도가있는 것처럼 보이지만 실제 상황에서는 가독성을 잃는 곳 어딘가에 사용해야 할 가능성이 매우 높습니다 (가변 양의 매개 변수 등의 구성을 변경한다고 생각).
보너스 섹터 : if () 내부에 속성 값을 설정하지 마십시오. if(bool=true!=false) { .. }
MSDN에서 인용 한 바와 같이 (이전 게시물에 언급)
문자열 결과 = (값> 100)? "가치는 크다": "가치는 작다";
다음과 같이 읽을 수 있습니다.
값은 100보다 큰가요? 그렇다면 문자열 결과는 "값이 큽니다", 아니오 인 경우 문자열 결과는 "값이 작습니다"입니다.