0

那代码片段

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

可以压缩成:

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

对大多数具有一定 Java 经验的程序员来说是熟悉的。但我想知道是否可以将两个以上的状态压缩成一行,例如:

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

如何将其(如果可能的话)压缩为一个语句,例如:

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
y = (addMore ? x + moreValue : (50 < x ? 50 : x));

但正如评论中所说,这远不如 if..else 语句可读,所以我认为应该避免它。

于 2012-07-31T09:54:58.957 回答
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-else if 组合,这一点都不明显。

于 2012-07-31T10:00:10.800 回答
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 回答