我什么时候应该在编程中应用 demorgans 法则?
When should I apply demorgans law in programming?
我认为任何入门编程的程序员 class 都必须记住 DeMorgan 定律。
如果你不知道它是什么,这里是要点
!(A && B) = !A || !B
!(A || B) = !A && !B
我假设如果我必须记住它,我会发现它适用于编程情况。但是我根本没用过。
为什么我应该在编程中使用它?它会使程序更快,还是使条件更易于阅读?
保持代码的可读性是一个重要原因,我相信在您之后处理您的代码的任何人都会同意这是一个重要原因。如果您只反转 (!) 一个值而不是两个值,您将节省一两个 CPU 周期。
另一个原因是绕过短路。当许多语言看到 !A || !B
时,它们会停止评估 !A 是否为真,因为 !B 是否为真并不重要。 !A 足以使 OR 为真。
如果 A 和 B 是函数而不是变量,而你希望两者都执行,你就会遇到问题:
if( !save_record() || !save_another_record() ) {
echo 'Something bad happened';
}
Demorgan 定律允许您将 OR 替换为 AND。需要评估 AND 的两边以确保其为真:
if( !( save_record() && save_another_record() ) ) {
echo 'Something bad happened';
}
我认为任何入门编程的程序员 class 都必须记住 DeMorgan 定律。
如果你不知道它是什么,这里是要点
!(A && B) = !A || !B
!(A || B) = !A && !B
我假设如果我必须记住它,我会发现它适用于编程情况。但是我根本没用过。
为什么我应该在编程中使用它?它会使程序更快,还是使条件更易于阅读?
保持代码的可读性是一个重要原因,我相信在您之后处理您的代码的任何人都会同意这是一个重要原因。如果您只反转 (!) 一个值而不是两个值,您将节省一两个 CPU 周期。
另一个原因是绕过短路。当许多语言看到 !A || !B
时,它们会停止评估 !A 是否为真,因为 !B 是否为真并不重要。 !A 足以使 OR 为真。
如果 A 和 B 是函数而不是变量,而你希望两者都执行,你就会遇到问题:
if( !save_record() || !save_another_record() ) {
echo 'Something bad happened';
}
Demorgan 定律允许您将 OR 替换为 AND。需要评估 AND 的两边以确保其为真:
if( !( save_record() && save_another_record() ) ) {
echo 'Something bad happened';
}