三項演算子が通常の if/else ブロックでどのように機能するかを示してください。例:
Boolean isValueBig = value > 100 ? true : false;
Exact Duplicate: 三項演算子を使用するにはどうすればよいですか?
三項演算子が通常の if/else ブロックでどのように機能するかを示してください。例:
Boolean isValueBig = value > 100 ? true : false;
Exact Duplicate: 三項演算子を使用するにはどうすればよいですか?
Boolean isValueBig = ( value > 100 ) ? true : false;
Boolean isValueBig;
if( value > 100 ) {
isValueBig = true;
} else {
isValueBig = false;
}
三項演算とif/elseの違いは、三項式が値に評価されるステートメントであるのに対し、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;
}
読みにくいと思っていたので、私は三項演算子のファンではありませんでした。たまたま、Jon Skeet と彼の著書C# in Depthは、ついにこの老犬の頭を殴り、沈み込ませました。Jon はこう言いました。
値 > 100?
"はい・いいえ"
今、目の不自由な人は見ることができます。
これがあなたがそれを第二の性質にするのに役立つことを願っています.
Boolean isValueBig;
if(value > 100) { isValueBig = true; } else { isValueBig = false; }
?:演算子MSDNページから引用されているように、「条件演算子(?:)は、ブール式の値に応じて2つの値のいずれかを返します。」
したがって、三項演算子を使用して、ブール値以上のものを返すことができます。
string result = (value > 100 ) ? "value is big" : "value is small";
悪い例、簡単に書くことができるので
Boolean isValueBig = value > 100 ? true : false;
なので:
bool isValueBig = value > 100
それを超えて、他の誰もがすでにそれに答えています。評価しているのはすでにブール値であるため、三項演算子を使用してブール値を設定することはお勧めしません。
ほんの一例だと思いますが、指摘する価値はありました。
Javaではtrue/falseの部分でタイプを混在させないようにしてください。それは奇妙な結果を生み出します:-(
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)は、 expr1がTRUEに評価される場合はexpr2に評価され、 expr1がFALSEに評価される場合はexpr3に評価されます。」
他の人はすでにそれに答えていますが、ここにあなたが三項の使用法について本当に知っておくべき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();
ネストされた三項と呼ばれます。それは悪いことです、あなたがそれについて知っているので、決してそれを使わないでください。上記のように使用できるように見えるかもしれませんが、実際の状況では、読みやすさが失われる場所で使用する必要がある可能性が非常に高くなります(パラメーターの量を変更するなどして構成を変更することを検討してください)。
ボーナスセクター:if()内に属性値を設定しないでください。これを見てください:if(bool=true!=false) { .. }
MSDN からの引用 (以前の投稿に記載)
文字列の結果 = (値 > 100 ) ? "値が大きい" : "値が小さい";
次のように読むことができます。
値は 100 より大きいか? はいの場合、文字列の結果は「値が大きい」、いいえの場合、文字列の結果は「値が小さい」です。