反转布尔表达式

invert a boolean expression

本文关键字:布尔表达式      更新时间:2023-09-26

我有一些类似的代码

var a = returnsABoolean();
var b = returnsABoolean();
if (!a || !b) {
} else {
  doStuff();
}

我该如何反转if语句中的测试,以便将其重写为

var a = returnsABoolean();
var b = returnsABoolean();
if (someExpression) {
  doStuff();
}

换句话说,我应该用什么测试来替换someExpression以保持现有的行为?

您需要应用德摩根定理。哪个州:

!A || !B == !(A && B)

因此,您的测试可以重写为:

if (a && b) {
    doStuff();
}

为什么它有效

基本上,应用德摩根定理,你首先将你的陈述改写为:

if ( ! (a && b) ) {
} else {
    doStuff();
}

由于我们现在想要反转!(a&&b),我们只需删除而不是

if ( (a && b) ) {
    doStuff();
}

De Morgan定律指出,可以将!a || !b重写为!(a&&b)

这也适用于另一种方式:!a && !b可以重写为!(a||b)

只需将条件的逻辑逆赋值给上一个作用域的"else"语句。

if( a && b ) { 
    doStuff();
     }