什么时候应该在编程中应用demorgans法?

时间:2016-04-19 18:47:51

标签: demorgans-law

我认为任何参加编程课程的程序员都必须记住DeMorgan的法律。

如果你不知道它是什么,这就是要点

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

我假设如果我必须记住它,我会发现它适用于编程情况。但我根本不必使用它。

我有什么理由在编程中使用它吗?它是否使程序更快,或者是否使条件更容易阅读?

1 个答案:

答案 0 :(得分:1)

保持代码可读是一个很重要的原因,我确定在您认同代码之后,无论是谁,您都会认为代码是重要代码。如果您只反转(!)一个值而不是两个值,那么您将保存一两个CPU周期。

另一个原因是绕过短路。当许多语言看到!A || !B时,他们就会停止评估是否!A是真的,因为如果B是真的则无关紧要。 !A足以让OR成为现实。

如果A和B是函数而不是变量,并且您希望两者都执行,那么您将遇到问题:

if( !save_record() || !save_another_record() ) { echo 'Something bad happened'; }

Demorgan的法律允许您用AND替换OR。需要评估AND的两面以确保它是真的:

if( !( save_record() && save_another_record() ) ) { echo 'Something bad happened'; }