4

含义:语句 A IMP B 等价于逻辑语句“If A Then B”。只有当 A 为真且 B 为假时,A IMP B 才为假。在所有其他情况下都是 True。

http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09d55-7ffc.html

我能模糊地记得大学里的“暗示”是什么。在现实世界中何时使用 IMP 算子?

4

3 回答 3

2

在我申请了我的 google-fu 之后

找到这个: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版本更好吗?

于 2011-11-08T01:50:52.130 回答
1

在现实世界中,能够做这样的事情来对可选参数执行验证会很方便:

<cfif structKeyExists(URL, "a") IMP validateId(URL.a)>

其中我们只关心 URL.a 是否存在的验证。那将是关于 IMP、IMO 最有用的应用程序(嗯,就像是这样)。

但是由于 IMP 实现中的错误,这不起作用:-(

我认为 Dale 断言更长(和不正确)的逻辑比缩短的版本更容易阅读是不言而喻的错误,并且基于一个似是而非的前提。他的立场是基于“某人不知道某事”是一个连续状态的想法,即:当某人不知道某事(如“IMP”的含义)时,他们将永远不知道它。这不是真的。一个人最初可能不知道某件事,但是一旦他们发现了它,那么他们就会知道它。因此,不知道 IMP 操作员如何工作的问题是一个非常短暂的问题。

我不认为需要 IMP 的情况经常出现,但是有它很方便。如果它正常工作,它会更方便;-)

于 2011-11-08T09:12:35.680 回答
0

我认为您应该远离它,我从未见过它使用过,也从未需要使用它。其他开发人员大多不会理解它是什么或意味着什么。

我宁愿写

<cfif a eq true and b eq false>

<cfif a imp b>

第一个要清楚得多。

于 2011-11-07T23:34:33.693 回答