1

Java では、通常の if 内で三項 if 演算子を使用すると、たとえば次のようになります。

if ((x > y - z) ? true : callLongWaitedMethod(many, parameteres)) {
        loveTeddyBear();
}

本当に true の場合、callLongWaitedMethod を実行しx > y - zますか? そうでないことを願っています。この素敵なステートメントを使用できます。一見すると少し複雑ですが、追加のブール変数と比較するとより魅力的です。

boolean b = (x > y - z) ? true : callLongWaitedMethod(many, parameteres);
if (b) {
        loveTeddyBear();
}

特に、これを何度も繰り返す大きなループ内で使用している場合、毎回ブール値を作成するのはパフォーマンスの観点からは良くありませんが、ループの外側でブール値を宣言すると、きちんとしたものを見逃す可能性があります。ループのサイズが大きい。

4

6 に答える 6

6

これは期待どおりに機能しますが、通常の||演算子を使用してまったく同じ結果を達成する方が明確です。

if ((x > y - z) || callLongWaitedMethod(many, parameteres)) {
        loveTeddyBear();
}
于 2012-07-18T11:39:52.160 に答える
3

Java言語仕様15.25によ​​ると、longメソッドは必要な場合にのみ評価されます。

選択されていないオペランド式は、条件式の特定の評価では評価されません。

于 2012-07-18T11:41:01.600 に答える
2

callLongWaitedMethodtrueの場合、呼び出されませx > y - z

于 2012-07-18T11:34:21.023 に答える
0

callLongWaitedMethodwhen is trueを実行したい場合(x > y - z)は、実際に式を交換する必要があります。

if ((x > y - z) ? callLongWaitedMethod(many, parameteres) : true ) {
        loveTeddyBear();
}
于 2012-07-18T11:38:12.647 に答える
0

ご希望の回答が得られたようです。また、コードの単純なバージョンでデバッグ ステートメントを使用して、動作を確認する方法として何が実行されるかを確認することもできます。何かのようなもの

if ((1 > 2) ? true : someSimpleMethod()) {
    System.out.println("true if");
}

そして、あなたsomeSimpleMethod()が持っているように

public boolean someSimpleMethod() {
    System.out.println("calling someSimpleMethod()");
    return true;
}

そこから、1 と 2 を入れ替えて、someSimpleMethod()が実行されるかどうかを確認できます。

于 2012-07-18T12:05:30.670 に答える
0

それが何をするのか理解できない場合は、本当にそのようにコーディングする必要があるのでしょうか? なぜこれだけではないのですか:

if ( (x>y-z) || 
     (x<=y-z && callLongWaitedMethod(many, parameteres))) {
    loveTeddyBear();
}

これは、コードに慣れていない初心者のプログラマーにとってより意味のあるものです。

于 2012-07-18T12:38:54.543 に答える