如果 2 个条件为真,如何正确跳过步骤
Posted
技术标签:
【中文标题】如果 2 个条件为真,如何正确跳过步骤【英文标题】:How to properly skip a step if 2 conditions are true 【发布时间】:2013-07-01 13:36:00 【问题描述】:我有两个条件,ShouldCheckForErrors
和 HasErrors
我的代码是
if(ShouldCheckForErrors && HasErrors)
//Do nothing
else
PassTest()
我觉得这是一个非常冗长的检查。有没有一种方法可以让我不必使用else
进行单次检查?
例如:
if(!ShouldCheckForErrors && !HasErrors)
PassTest()
不起作用,因为当ShouldCheckforErrors
是true
,但HasErrors
是false
时,将无法调用PassTest()
。 (反之亦然)
我只是觉得我的逻辑运算符忘记了一些东西。
【问题讨论】:
【参考方案1】:您正在寻找De Morgan's Law:
if (!ShouldCheckForErrors || !HasErrors)
换一种说法:
如果没有错误,或者我们没有检查错误,您应该通过。
【讨论】:
根据第一个代码(即“更长”),pass表示两个都是真的,这不是或,而是和。 @Tigran:这不是否定的工作方式。 en.wikipedia.org/wiki/De_Morgan%27s_laws 这是个好方法。现在我不确定@Adil 答案是如何编译成的,但我认为这两个条件都在此处检查,如果!ShouldCheckForErrors
评估为true
,则不会检查HasErrors
鉴于用户的新手,您可能想在此处解释德摩根定律或其相关性或用途,而不是将相当密集的***文章留给初学者。
@Tigran: !(A && B) === (!A || !B)
【参考方案2】:
在得到两个条件的结果后使用 not 运算符 !
if(!(ShouldCheckForErrors && HasErrors))
PassTest();
【讨论】:
在我发布 +1 之前没看到这个 非常干净,但我决定使用(!ShouldCheckForErrors || !HasErrors)
以防止不必要地调用第二个条件。【参考方案3】:
你的逻辑有点不对
!ShouldCheckForErrors && !HasErrors
不一样
!(ShouldCheckForErrors && HasErrors)
这就是我相信你想要的
【讨论】:
【参考方案4】:更简单的情况 -
if(theOnlyCheck)
else
do();
您似乎足够精明,可以缩短此检查 -
if(!theOnlyCheck)
do();
但你只是搞乱了你的操作顺序。
用(check1 && check2)
替换theOnlyCheck
。不要忘记括号:
if(!(check1 && check2))
do();
现在,如果您不喜欢处理这些括号,可以遵循德摩根定律:!(a && b)
与 !a || !b
相同。自己想想看——
if(!check1 || !check2)
do();
【讨论】:
以上是关于如果 2 个条件为真,如何正确跳过步骤的主要内容,如果未能解决你的问题,请参考以下文章