如果你有一个三元条件是这样的:评估功能多少次?
(sum(a,b) > sum(b,c) ? sum(a,b) : sum(b,c))
它是高效,清洁,以这种方式写? sum(a,b)
或sum(b,c)
评估两次?我该如何改进?
如果你有一个三元条件是这样的:评估功能多少次?
(sum(a,b) > sum(b,c) ? sum(a,b) : sum(b,c))
它是高效,清洁,以这种方式写? sum(a,b)
或sum(b,c)
评估两次?我该如何改进?
对于这个特殊的问题,你最好使用Math.max()而不是自己写出三元表达式逻辑。
是的,这是两次评估(当然,可能有一些(JIT)编译器/ JVM优化,我不知道,但你不能依赖于)
计算值前三元运算符。:
int sumAB = sum(a, b);
int sumBC = sum(b, c);
sumAB > sumBC ? sumAB : sumBC;
当然,对于一个简单的总和,差异可以忽略不计。但总的来说这是一个很好的做法。
是的,他们将被评估两次。
你可以这样做:
int x, y;
((x = sum(a,b)) > (y = sum(b,c))) ? x : y;
,如果你真的想使用三元运算。
是的,它会被评估两次,也不容易维护。您需要重构方法调用。
似乎'b'是无条件的。
sum(b, Math.max(a, c))
只是节省了源代码字节,不是吗? – unbeli 2011-01-08 22:56:35
仍然不是一个downvote的原因.. – Bozho 2011-01-08 23:00:06