0

そのコードスニペット

if (addMore) {
    y = x + moreValue;
} else {
    y = x;
}

次のように圧縮できます。

y = (addMore ? x + moreValue : x);

Java の経験がある程度あるほとんどのプログラマーにはなじみがあります。しかし、2 つ以上の状態を 1 行に圧縮できるかどうか疑問に思っていました。

if (addMore) {
    y = x + moreValue;
} else if (50 < x) {
    y = 50;
} else {
    y = x;
}

これを(可能であれば)次のような1つのステートメントに圧縮するにはどうすればよいですか。

y = (addMore ? x + moreValue {SOMETHING IN HERE} : x);
4

5 に答える 5

2
condition1 ? (condition1-2 ? action 1-2: action-not-1-2) : action-not-1
于 2012-07-31T09:54:00.900 に答える
1

1.悪名高いことわざ.....「愚か者なら誰でもコンピューターが理解できるコードを書くことができますが、人間が理解できるコードを書くのは優れたプログラマーだけです。...

2.その詳細readabilityunderstandability

しかし、まだここにあなたの答えがあります...。

(addMore ? x + moreValue : (50 < x ? 50 : x)) //これをyに割り当てます

于 2012-07-31T09:59:31.353 に答える
1

私はそのような構成を定期的に使用します。これはClojureを彷彿とさせcondます:

y = 
  addMore ? x + moreValue :
  50 < x  ? 50            :
            x;

まったく逆に、読みやすさの問題は見つかりません。この構成全体がyに値を割り当てることであると確信できるのが好きです。これは、従来のif-elseifの組み合わせではまったく明らかではありません。

于 2012-07-31T10:00:10.800 に答える
1
y = (addMore ? x + moreValue : (50 < x ? 50 : x));

しかし、コメントで述べたように、これは if..else ステートメントよりもはるかに読みにくいので、避けるべきだと思います。

于 2012-07-31T09:54:58.957 に答える
1
Using Ternary operator, more than one condition can check.
if First condition is true then compare with second value.

y = (addMore ? x + moreValue : (50 < x ? 50 : x));
于 2012-07-31T10:10:27.873 に答える