[英]Boolean Logic question: can I coerce these 4 if statements into a single boolean statement?
我有一个布尔逻辑问题。 我有以下if语句应该可以合并为单个布尔表达式。 请帮忙。 我在此上花了太多时间,实际上我很too愧,无法问我的同事。
if (denyAll == true & allowOne == false) return false;
if (denyAll == true & allowOne == true) return true;
if (denyAll == false & allowOne == false) return false;
if (denyAll == false & allowOne == true) return true;
return true; //should never get here
我敢肯定有一个优雅的解决方案。
谢谢
将return allowOne;
绝招?
我认为这仅仅是:
return allowOne;
denyAll值似乎无关紧要:
denyAll allowOne result
false false false
false true true
true false false
true true true
为了补充其他答案,一些基本技巧:
您可以使用if (allowOne)
代替if (allowOne == true)
或if (!allowOne)
代替if (allowOne == false)
另外,对于条件运算,通常应使用&&
运算符而不是&
,因为这会导致短路。 例如,在表达式if (denyAll && !allowOne)
,如果denyAll
为false,则因为表达式已经为false,所以它不会费心计算!allowOne
。
此外,如果您的方法像此处一样返回bool
,则通常可以将表达式简化为return语句本身。 例如:
if (!denyAll && allowOne)
return true;
else
return false;
简化为:
return (!denyAll && allowOne);
如何return allowOne;
。 如果一切都只是一个变量,并且读数没有副作用,那么结果应该相同。
看起来真正重要的价值是您的“ allowOne”布尔值(因为denyAlls的价值似乎无关紧要)。 假设您只是检查allowOne是否为true。
据我所知:
If allowOne = true then return true;
return false;
会做到这一点,“拒绝全部”设置似乎对结果没有任何影响,因此不应存在。
您可以使用如下形式:
if (denyAll && !allowOne)
return false;
return denyAll || allowOne;
不过,您应该考虑一些更具可读性的内容。
更新:正如其他人指出的那样(我还没有看到),您实际上忽略了denyAll all,因此return allowOne;
是你所需要的全部。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.