Когда использовать оператор IMP в ColdFusion? - PullRequest
4 голосов
/ 08 ноября 2011

Вывод: утверждение A IMP B является эквивалентом логического утверждения «Если A, то B.» A IMP B является ложным, только если A истинно, а B ложно.Это верно во всех других случаях.

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

Я смутно помню, что такое "подтекст" из колледжа.Когда использовать оператор IMP в реальном мире?

Ответы [ 3 ]

2 голосов
/ 08 ноября 2011

После того, как я применил свой гугл-фу

Нашел это: http://www.cfug -md.org / встречи / 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 версия лучше?

1 голос
/ 08 ноября 2011

В реальном мире было бы удобно иметь возможность сделать что-то подобное, чтобы выполнить проверку по необязательным параметрам:

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

, где мы заботимся только о проверке URL.a, если он существует,Это было бы самое полезное применение IMP, IMO (ну, вроде бы, так).

Однако из-за ошибки в реализации IMP это неработа: - (

Я думаю, что утверждение Дейла о том, что гораздо более длинная (и неправильная) логика легче читать, чем укороченная версия, самоочевидно неверно и основано на ложной предпосылке для загрузки. Его позиция основана нана идее, что «кто-то не знает что-то» является непрерывным состоянием, то есть: когда кто-то не знает что-то (например, что означает «ИМП»), то он никогда не будет знать это. Это не правда. Человек не можетИзначально знаю что-то, но как только они узнают об этом, они узнают об этом, так что проблема незнания того, как работает ИМП, является очень недолгой.

Я не думаю, что ситуациивозникают там, где нужен IMP, возникают очень часто, но его удобно иметь там. И было бы еще удобнее, если бы он работал правильно; -)

0 голосов
/ 08 ноября 2011

Я думаю, вы должны избегать этого, я никогда не видел, чтобы он использовался, и никогда не было необходимости его использовать. Другие разработчики в основном не понимают, что это такое или что означает.

Я бы лучше написал

<cfif a eq true and b eq false>

чем

<cfif a imp b>

Первое намного понятнее.

...