2011-01-08 125 views
2

如果你有一个三元条件是这样的:评估功能多少次?

(sum(a,b) > sum(b,c) ? sum(a,b) : sum(b,c)) 

它是高效,清洁,以这种方式写? sum(a,b)sum(b,c)评估两次?我该如何改进?

回答

5

对于这个特殊的问题,你最好使用Math.max()而不是自己写出三元表达式逻辑。

4

是的,这是两次评估(当然,可能有一些(JIT)编译器/ JVM优化,我不知道,但你不能依赖于)

计算值前三元运算符。:

int sumAB = sum(a, b); 
int sumBC = sum(b, c); 
sumAB > sumBC ? sumAB : sumBC; 

当然,对于一个简单的总和,差异可以忽略不计。但总的来说这是一个很好的做法。

1

是的,他们将被评估两次。

你可以这样做:

int x, y; 
((x = sum(a,b)) > (y = sum(b,c))) ? x : y; 

,如果你真的想使用三元运算。

+1

只是节省了源代码字节,不是吗? – unbeli 2011-01-08 22:56:35

+0

仍然不是一个downvote的原因.. – Bozho 2011-01-08 23:00:06

0

是的,它会被评估两次,也不容易维护。您需要重构方法调用。

1

似乎'b'是无条件的。

sum(b, Math.max(a, c))