我碰到一个程序是一些具有特殊的输出中,我有几个if语句是这样的:||和&&在一个单一的if语句
if((m.getLeft(position).state == position.state.wall || m.getLeft(position).state == position.state.border)
&& (m.getBelow(position).state == position.state.open || m.getBelow(position).state == position.state.visited)){
check = true;
}
哪里我都& &和||在相同条件下使用。如果getLeft()中的单元格是墙或边框,并且getBelow()中的单元格是打开或访问的,我希望布尔检查为真。
这段代码,我现在编写的方式,是否正确执行此检查?也许更重要的是,写这样的陈述是否可怜的形式?将它分成两个陈述会更好吗?
我不确定我看到的特性是由这些语句还是别的,我的问题更多的是关于一般性的最佳实践。
编辑:谢谢你的所有输入。我很怀疑(这太复杂了),这就是为什么我按照我的方式构思了我的问题。
EDIT(一年后,回头看)(重述以上更发奋)对上帝的爱,不要写类似于上面的if
声明任何东西。如果您发现自己的代码行类似,请记住occam's razor可能比编程更适用。
您的if语句非常复杂。我认为这使得难以理解。我认为您需要的REAL解决方案是将其分解为两个if语句,或者重构您的方法以不需要这种复杂化。 – theJollySin 2013-02-10 06:11:17
我看不到这里的复杂性或真正的问题。如果前两个条件中的任何一个解析为“真”,并且后两个条件中的任何一个解析两个“真”......则将“检查”设置为“真”。这是一个非常基本的if语句。 – 2013-02-10 06:20:25