我遇到了一个我想解决的问题。 只要x为正
,此表达式就可以正常工作x > 0 ? x - y : x + y;
当它变为负数时,这就是问题开始的地方。 所以我想到了
x !=0 & x < 0 ? x - y : Math.abs(x - y)*-1)
但这让我无处可去,我解决了它:
if (x > 0 && x - y > 0) {
x -= y;
} else if (x < 0 && x + y > 0) {
x += y;
} else {
x = 0;
}
然而,这很长,看起来并不优雅。
有什么方法可以通过三元运算缩短效率?
答案 0 :(得分:2)
x = x >=0 ? x - y : x + y;
x = x < 0 ? 0 : x;
或
x = Math.max(x >= 0 ? x - y : x + y, 0);
答案 1 :(得分:1)
试试这个
x = !x? 0 : Math.max(0, x-y*(Math.abs(x)/x));
答案 2 :(得分:0)
是的,您可以使用条件(也称为三元)运算符编写相同的内容:
x =
x > 0 && x - y > 0 ? x - y :
x < 0 && x + y > 0 ? x + y :
0;
或将零点检查分开:
x =
x > 0 ? x - y :
x < 0 ? x + y :
0;
x = x > 0 ? x : 0;
答案 3 :(得分:0)
我不知道你为什么要做你正在做的事情,但你不能简单地做:
Math.max(x < 0 && x + y > 0 ? x + y : x - y, 0)
这似乎和你的if语句一样。
答案 4 :(得分:0)
以上答案都解决了你的问题,但说明了我认为三元表达式的一个主要问题 - 它们经常导致代码难以理解。这就是我很少使用它们的原因。
我认为你用if / else语句编写的代码是迄今为止最好的解决方案。我已经编程超过40年了,相信我,你应该总是喜欢编写易于理解的代码,这些代码应该是“优雅”的代码。这将为您节省大量时间,特别是当您在很长一段时间后回到代码并忘记您想要做的事情时。