React项目中两个预加载器判断逻辑表达式是否完全等价?
问题1:两个逻辑表达式是否完全等价?
是,二者在布尔逻辑层面完全等价,符合德摩根定律:对!(A && B)取反展开后等价于!A || !B。
代入你给出的变量:
- A =
!this.state.isFetching - B =
this.state.isReady
展开后得到!(!this.state.isFetching) || !this.state.isReady,化简后就是this.state.isFetching || !this.state.isReady,二者的真值表完全一致,所有场景下返回的布尔值都相同。
问题2:哪个可靠性更高?
如果代码均编写正确,二者的运行可靠性没有任何差异。但从可维护性、出错概率的角度看,this.state.isFetching || !this.state.isReady的表现更好:
- 它直接对应你的需求描述:「API拉取中 或者 依赖未加载完成 就显示预加载器」,逻辑和需求对齐,可读性强
- 同事的写法是先判断「不需要显示预加载的场景」再整体取反,多了一层逻辑转换,后续维护时如果要修改判断条件,更容易因为漏写括号、多写/少写取反符出现逻辑错误。
问题3:调换或运算的两个条件顺序是否影响结果?
不会影响最终运行结果。
首先布尔或运算本身满足交换律,A || B和B || A的返回值完全一致;其次你这里两个条件都是直接读取state的布尔属性,没有任何函数调用、DOM操作之类的副作用,不存在短路求值带来的额外差异,调换顺序后运行结果完全相同。
内容的提问来源于stack exchange,提问作者Sushmit Sagar
相关产品推荐
相关产品推荐

