含义:语句 A IMP B 等价于逻辑语句 “如果 A,则 B。” 当且仅当 A 为真且 B 为假时,A IMP B 为假。在其他情况下它都是真的。
http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09d55-7ffc.html
我依稀记得在大学学过"implication"是什么。在现实世界中何时使用IMP运算符?
含义:语句 A IMP B 等价于逻辑语句 “如果 A,则 B。” 当且仅当 A 为真且 B 为假时,A IMP B 为假。在其他情况下它都是真的。
http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09d55-7ffc.html
我依稀记得在大学学过"implication"是什么。在现实世界中何时使用IMP运算符?
我运用我的谷歌功夫找到了这个链接:
http://www.cfug-md.org/meetings/RichardBierregaardLogicwCFConditionals.ppt
它启发我认识到IMP可能有助于编写单元测试:
assertTrue(Income >= 200000 IMP TaxRate == 0.35);
assertTrue(Income < 200000 AND Income >= 70000 IMP TaxRate == 0.28);
assertTrue(Income < 70000 AND Income >= 35000 IMP TaxRate == 0.20);
assertTrue(Income < 35000 AND Income >= 15000 IMP TaxRate == 0.10);
assertTrue(Income < 15000 IMP TaxRate == 0);
if (Income >= 200000) assertTrue(TaxRate == 0.35);
if (Income < 200000 AND Income >= 70000) assertTrue(TaxRate == 0.28);
if (Income < 70000 AND Income >= 35000) assertTrue(TaxRate == 0.20);
if (Income < 35000 AND Income >= 15000) assertTrue(TaxRate == 0.10);
if (Income < 15000) assertTrue(TaxRate == 0);
你认为 IMP
版本更好吗?
<cfif structKeyExists(URL, "a") IMP validateId(URL.a)>
在这里,我们只关心验证URL.a是否存在。这可能是IMP最有用的应用之一,我个人认为(嗯,就像这样)。
然而,由于IMP实现中的bug,这并不起作用:-(
我认为Dale的断言,即更长(且不正确)的逻辑比缩短版本更易于阅读,是自相矛盾的,并且基于一个牵强附会的前提。他的立场基于这样一个想法:“某人不知道某事”是一个连续的状态,即当某人不知道某事(比如“IMP”的含义)时,他们将永远不知道它。这是不正确的。一个人可能最初不知道某件事,但一旦他们了解了它,那么他们就会知道它。因此,不知道IMP操作符如何工作的问题是一个非常短暂的问题。
我认为需要使用IMP的情况并不经常出现,但有它确实很方便。如果它能正常工作,那就更方便了;-)
我认为你应该避免使用它,我从未见过它被使用过,也从未有过使用它的需求。其他开发人员大多不会理解它的含义。
我宁愿写
<cfif a eq true and b eq false>
比
<cfif a imp b>
第一个更清晰明了。
<cfif a eq false or b eq true>
,对吗? - Henry