如何防止短路?

时间:2014-04-22 14:40:32

标签: java logical-operators short-circuiting

假设我有两个功能,boolean fA()boolean fB()

如果我写了另一个函数function(boolean b)并且我调用了function(fA()||fB()),那么如果fB()返回true,则可能无法执行fA()

我喜欢这个功能,但在这里我需要两个函数来执行。明显的实施:

boolean temp = fA();
function(fB()||temp);

很难看,而且需要额外的一行会降低它的可读性。

有没有办法用Java或其他优雅方式强制进行评估,在没有辅助变量的情况下将其写入一行?

2 个答案:

答案 0 :(得分:13)

您可以使用|,而不是short-circuit evaluation

function(fB() | fA());

这可确保即使fBtrue,也会调用fA

答案 1 :(得分:1)

您正在尝试编写一些聪明的代码。这将损害长期可维护性,并可能导致人们试图修复'你聪明的代码并打破它。

正确的做法是简单明了地写下你正在做的事情:

boolean val = false;
val |= fA();
val |= fB();
function(val);

毫无疑问,当val返回false时,参数fB()是什么,或者fA()是否被调用。代码可能比其他聪明的版本占用更多的行,但它清晰简洁,并准确地显示它正在做什么,并打算以不向某人建议某些其他功能的方式进行。