出于好奇,是否有一种(语言无关的)方法将这两个通用语句组合成一个语句?
if (a < b) a += x;
else if (a > b) a -= x;
也可以用作
if (abs(b - a) < x) a = b;
else if (a < b) a += x;
else if (a > b) a -= x;
哦,既然我正在写这篇文章,我正在考虑这样的事情:
if (a != b) a += x * (a < b ? 1 : -1);
但这并没有真正有益于可读性。其他方式也许?
答案 0 :(得分:6)
a += x * sgn(b-a)
sgn
是签名函数的地方:
sgn x | x > 0 = 1
| x < 0 = -1
| otherwise = 0
答案 1 :(得分:3)
你真的想知道为什么要这样,编译器会做很好的优化,而且给定的语句非常易读。
答案 2 :(得分:1)
语言独立有点棘手,但如果你有cmp或类似的,你可以使用:
a += x * cmp(b, a)
cmp(b,a)返回:
此外,您建议的实施中存在错误:
a = 9;
b = 10;
x = 2;
if (a < b) a += x;
if (a > b) a -= x;
print a;
输出:9(预期11)
您需要else
来解决此问题。或者,如果您想阻止a
超过b
,请执行以下操作:
if (a < b)
{
a = min(b, a + x);
}
else if (a > b)
{
a = max(b, a - x);
}
如果您想在一个表达式中执行此操作,您可以:
a = (a < b) ? min(b, a + x) : max(b, a - x);
我认为第一种方式更清晰。
答案 3 :(得分:0)
a += (b - a) / abs(b - a) * x
但这不是语言独立的,如果你问我,它并不能真正帮助你准备......