三項演算子はどのように機能しますか?
-
19-08-2019 - |
質問
三項演算子が通常のif / elseブロックでどのように機能するかを示してください。例:
Boolean isValueBig = value > 100 ? true : false;
正確な複製: どのように使用しますか三項演算子?
解決
Boolean isValueBig = ( value > 100 ) ? true : false;
Boolean isValueBig;
if( value > 100 ) {
isValueBig = true;
} else {
isValueBig = false;
}
他のヒント
三項演算とif / elseの違いは、三項式が値に評価されるステートメントであるのに対し、if / elseはそうではないことです。
例を使用するには、三項式の使用から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; }
読みにくいと思ったので、三項演算子のファンではありませんでした。そうなると、ジョン・スキートと彼の本、 C#in Depth がついにこの老犬を頭にぶつけて沈み込ませました。ジョンは言った、言い換えれば、それを質問と考えてください。
value <!> gt; 100?
<!> quot; yes <!> quot; :<!> quot; no <!> quot;
今、盲人は見ることができます。
これがあなたを第二の性質にするのに役立つことを願っています。
?:Operator MSDNページ、<!> quot;条件演算子(?:)は、ブール式の値に応じて2つの値のいずれかを返します。<!> quot;
したがって、三項演算子を使用して、単なるブール値以上のものを返すことができます。
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'];
}
?>
<!> quot;式(expr1)? (expr2):(expr3)は、 expr1 が TRUE 、および expr3 と評価される場合、 expr2 と評価されます expr1 が FALSE と評価された場合。<!> quot;
Javaで真/偽の部分に型を混在させないようにしてください。奇妙な結果が生成されます:-(
悪い例、あなたは簡単に書くことができるので
Boolean isValueBig = value > 100 ? true : false;
as:
bool isValueBig = value > 100
それ以外にも、他のみんながすでに答えています。あなたが評価しているのは既にブール値なので、ブール値を設定するために三項演算子を使用することはお勧めしません。
単なる例に過ぎないことは承知していますが、指摘する価値はありました。
他の人はすでにそれに答えていますが、ここでは、3項の使用法について本当に知っておくべき1つのことを示します。
ある値の可能なバリエーションごとに異なるオブジェクトを返すことになっているコードの断片があると仮定しましょう。簡単にするために、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();
}
わかりやすいですが、少し重いです。 三項は、これにリファクタリングできる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から引用(以前の投稿に記載)
string result =(value <!> gt; 100)? <!> quot; value is big <!> quot; :<!> quot; value is small <!> quot ;;
次のように読むことができます:
値は100より大きいですか?はいの場合、文字列の結果は<!> quot; value is big <!> quot ;、いいえの場合、文字列の結果は<!> quot; value is small <!> quot;です。