在根据功能和性能指定参数/属性值时,是和否等于是和否?

时间:2012-08-08 13:05:28

标签: coldfusion

使用yes | no vs. true | false是否存在任何已知的功能或性能差异? ColdFusion文档声明布尔类型属性的值使用yes / no指定。例如,< cfargument required =“yes | no”....>我使用了true和false代替yes | no并且没有看到任何意外的功能。

[编辑] 我很欣赏这些回复,也许在这种情况下我想的更为一般。

ColdFusion文档声明某些参数的预期值为“yes | no”,例如cfargument required。是否有任何见解为什么yes | no被记录为唯一的预期值,而不是true | false或说明'任何布尔值'是预期的?似乎有点模棱两可,不指示任何布尔类型,而不是只有状态'是|否'如果A)我们要假设'任何布尔'B)存在实际的性能差异。想法?

4 个答案:

答案 0 :(得分:9)

ColdFusion同等地评估是/否,真/假,1(或任何非零数字)/ 0。这样可以轻松制作<cfif myquery.recordcount><cfif len(FORM.myVar)>等快捷方式布尔值,而无需将整数转换为真/假。

答案 1 :(得分:5)

"yes/no"只需输入几个字符。

"true/false"(和true / false)更符合其他编程语言。

就性能而言,就CF而言,它们都是字符串。直到你尝试在条件逻辑中使用它们,它们才会神奇地变成其他数据类型,比如java.lang.Boolean。字符串和布尔值之间的转换又很快。这是CF大多数时间所做的事情。你很难找到任何可靠的测试证明一个比另一个更快。

对于代码可维护性/可读性,最好坚持使用其中一种。

一些传统的CF标签功能特别需要“是/否”。他们根本不会使用“真/假”。我相信在CF9 +中不再是这种情况了。

不要依赖ColdFusion文档准确或最新。几乎所有列出“是/否”作为默认值/允许值的方法实际上都支持任何类型的布尔值。 “是/否”,“真/假”,真/假,1/0等。

对于布尔人使用“是/否”的恕我直言是疯了。从旧的CF5时代向后兼容。很糟糕,Adobe仍然使用它来输出java布尔值。

例如。 writeDump( var: (not true) );给你“不”。但是,我想false?!哎呀。

通过调用myVar.getClass().getName(),您可以告诉您当前变量的java类。您可以使用它来观察CF将您的数据从Boolean转换为String并再次返回到Boolean,就像魔术一样。

答案 2 :(得分:0)

作为一项实验,你可以试试这个。对我来说,1000万次不使用“是”的迭代导致大部分时间减少100毫秒。

<cfscript>
bln = true;
starttime = getTickCount();

for(i=0;i<10000000;i++){
if(bln eq true)
  foo="bar";
}
writeOutput(getTickCount()-startTime & '<br />');

starttime = getTickCount();

for(i=0;i<10000000;i++){
if(bln eq "yes")
  foo="bar";
}
writeOutput(getTickCount()-startTime & '<br />');
</cfscript>

答案 3 :(得分:0)

我们刚刚将项目升级到CF2016,突然开始出现java.lang.VerifyError“函数的不兼容参数”错误。原来是cfform,我们正在使用accessibility =“ true”。将值更改为“是”不会 消除错误。删除整个“可访问的”表单标签就可以了。与其找出与Flash相关的噩梦,不如从表单中删除它。

谢谢Adobe。