4

たとえば、次のコード例のように、ネストされた if-else ステートメントを改善するにはどうすればよいでしょうか (数字は同じである必要はありません。単なる例です)。

boolean a, b;
int result = 0;

if (a && b) {
    result = 3;
} else if (a) {
    result = 1;     
} else if (b) {
    result = 2;
}

これはどういうわけかもっとうまく書くことができますか?それともそのままでいいと思いますか?

4

8 に答える 8

12

与えられた特定の数字について:

int result = (a ? 1 : 0) + (b ? 2 : 0);

より一般的なケースでは、既に記述したコードに大きな問題はありません。非常に簡潔で、完全に読みやすく、理解しやすいです。

于 2013-10-31T08:28:13.577 に答える
7

これを直接返すことができるメソッドに入れると、読みやすくなり、このロジックも別の場所に削除されます。

public int getThing(final boolean a, final boolean b) {
    if (a && b) {
        return 3;
    }
    if (a) {
        return 1;     
    }
    if (b) {
        return 2;
    }
    return 0;
}

2 項演算子や 3 項演算子を使用しても、たとえば 1 年後に何をしたのか、なぜそれをしたのかを解明しようとする将来の苦痛を除いて、実際に多くのことを得るとは思いません。

于 2013-10-31T08:28:51.580 に答える
5
if (a) result |= 0x1;
if (b) result |= 0x2;
于 2013-10-31T08:27:12.560 に答える
1

これは a と b を複数回チェックしません。

if (a) {
    result = b ? 3 : 1;
} else if (b) {
    result = 2;
}

または、あなたが短いものを求めたので、ここに 1 つの行がありますが、私は上の行を好みます。

result = a ? (b ? 3 : 1) : b ? 2 : 0;
于 2013-10-31T08:27:45.780 に答える
1
int result = (a && b) ? 3 : (a) ? 1 : (b) ? 2 : -1; 

その -1 はトリッキーですがint result;、ネイティブ型は ; ではないため、言うことはできないと思いますnull

于 2013-10-31T08:28:48.943 に答える