6

Javaで三項演算子を使用してインクリメントを適用することは可能ですか?

たとえば、これを「if」ステートメントなしで作成したいのは、読みやすくしたり短くしたりするためではなく、知りたいだけです。

if(recordExists(recordId)){
   numberofRecords++;
}
4

3 に答える 3

17

Javaで三項演算子を使用してインクリメントを適用することは可能ですか?

代わりに加算を使用できます。

numberOfRecords += recordExists(recordId) ? 1 : 0;

IMHO これには副作用はありません。

于 2012-11-02T14:28:45.150 に答える
7

Javaで三項演算子を使用してインクリメントを適用することは可能ですか?

さて、あなたは書くことができます:

// Ick, ick, ick.
int ignored = recordExists() ? numberOfRecords++ : 0;

または、no-op メソッド呼び出しを行います。

// Ick, ick, ick.
Math.abs(recordExists() ? numberOfRecords++ : 0);

ただし、そうすることは強くお勧めしません。条件演算子の乱用です。ifステートメントを使用するだけです。

条件演算子の目的は、値が条件に依存する式を作成することです。

ステートメントの目的は、条件に基づいていくつかのステートメントifを実行することです。

Eric Lippert の接線関連の C# ブログ投稿から引用するには:

式の目的は値を計算することであり、副作用を引き起こすことではありません。ステートメントの目的は、副作用を引き起こすことです。

編集:この回答の有効性に疑問が投げかけられていることを考えると:

public class Test {
    public static void main(String[] args) {
        boolean condition = true;
        int count = 0;
        int ignored = condition ? count++ : 0;
        System.out.println("After first check: " + count);
        Math.abs(condition ? count++ : 0);
        System.out.println("After second check: " + count);
    }
}

出力:

After first check: 1
After second check: 2
于 2012-11-02T14:26:22.170 に答える