5

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

[编辑]我很欣赏这些回应,也许我在这种情况下想得更笼统。

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

4

4 回答 4

9

ColdFusion 平等地评估是/否、真/假、1(或任何非零数)/0。这使得制作快捷布尔值变得容易,例如<cfif myquery.recordcount><cfif len(FORM.myVar)>不必将整数转换为真/假。

于 2012-08-08T13:22:02.810 回答
6

"yes/no"是少了几个字符来输入。

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

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

为了代码的可维护性/可读性,最好坚持使用其中一个。

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

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

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

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

您可以通过调用来判断您的变量当前是什么 java 类myVar.getClass().getName()。您可以使用它来观看 CF 将您的数据从 Boolean 转换为 String 并再次转换为 Boolean,就像魔术一样。

于 2012-08-09T12:44:26.803 回答
0

作为一个实验,你可以试试这个。对我来说,不使用“是”的一千万次迭代导致大部分时间减少了 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>
于 2012-08-08T13:20:09.240 回答
0

我们刚刚将一个项目升级到 CF2016,突然开始出现 java.lang.VerifyError "Incompatible argument to function" 错误。原来是cfform,我们使用accessible="true"。将值更改为“yes”不会消除错误。删除整个“可访问”表单标记确实如此。我们没有弄清楚这代表什么与 Flash 相关的噩梦,而是将其从表单中删除。

谢谢,Adobe。

于 2019-01-31T12:58:56.637 回答