正逻辑: if 的条件按顺序执行(条件逻辑 返回 真)
反逻辑: 用反逻辑做钩子(条件逻辑 返回 假)
场景一:
if (A && B) return 1;
A | B | bool value |
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
反逻辑后,相同A、B值,bool value 却相反了
if (!A || !B) return 0;
A | B | bool value |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 1 |
场景二:
if (0 == A || (1 == A && 2 == B))
A | B | bool value |
0 | 0 | 1 |
0 | 1 | 1 |
0 | 2 | 1 |
1 | 0 | 0 |
1 | 1 | 0 |
1 | 2 | 1 |
反逻辑后,相同A、B值,bool value 却相反了
if (1 == A && 2 != B)
A | B | bool value |
0 | 0 | 0 |
0 | 1 | 0 |
0 | 2 | 0 |
1 | 0 | 1 |
1 | 1 | 1 |
1 | 2 | 0 |
推导方法:
(0 == A || (1 == A && 2 == B))
反逻辑后:
--> (!(0 == A) && !(1 == A && 2 == B))
--> ((1 == A) && !(1 == A && 2 == B))
--> ((1 == A) && (!(1 == A) || !(2 == B)))
--> ((1 == A) && (0 == A || 2 != B))
--> (1 == A && 2 != B )
场景三:
{
if (A) return false;
.............pass..............
}
A | bool value | 效果 |
1 | 1 | 提前返回 |
0 | 0 | 放行 |
如果条件A成立时,提前返回;此时想加入当条件B成立时,放行。
反逻辑后,
{
if (A && !B) return false;
.............pass..............
}
A | B | bool value | 效果 |
1 | 0 | 1 | 提前返回 |
1 | 1 | 0 | 放行 |
0 | 0 | 0 | 放行 |
0 | 1 | 0 | 放行 |