使用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)存在实际的性能差异。想法?
答案 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。