我正在寻找某人在这里交叉检查我的逻辑。
我在某些代码中遇到了以下格式的条件,并且我认为我可以压缩它,但我想确保我的逻辑没有缺陷。
现有条件如下:
if ((b1 && b2) || (b1 && b2 && !b3))
b1
,b2
和b3
当然是boolean
值。
如果我正确阅读,则以下情况属实:
b1 && b2
为true
,则不会考虑rhs
条件的or
。b1 && b2
为false
,则rhs
条件的or
不能为true
。因此,条件的rhs
完全没必要,没有任何意义,可以简化为以下内容:
if (b1 && b2)
我的逻辑是真的,还是我错过了什么?
PS>如果有人建议获得更好的头衔,请告诉我。感谢。
答案 0 :(得分:2)
是的,因为这两个条件都要求b1
和b2
为真:
if ((b1 && b2) // b1 and b2 are true
||
(b1 && b2 && !b3)) //b1 and b2 are true *and* b3 is false
如果b3
为真,则满足第一个条件。如果b3
为假,则满足第二个条件。因此,b3
的值无关紧要。另外,正如您所提到的,如果b1
或b2
为假,则第二个条件甚至不会被评估。
该陈述相当于:
if ((b1 && b2) || (b1 && b2)))
相当于:
if (b1 && b2)