你能在ColdFusion中用一条线做什么?

时间:2009-12-16 16:16:34

标签: coldfusion

有没有办法在一个优雅的代码行中编写这个逻辑?

<cfif ThumbnailWidth EQ 0>
   <cfset Width = 75>
<cfelse>
   <cfset Width = ThumbnailWidth>
</cfif>

5 个答案:

答案 0 :(得分:28)

Coldfusion 9:

<!--- Syntax: ((condition) ? trueStatement : falseStatement) --->
<cfset width = ((ThumbnailWidth EQ 0) ? 75 : ThumbnailWidth) />

Coldfusion 8及以下:

<!--- Syntax: IIf(condition, trueStatement, falseStatement) --->
<cfset width = IIf((ThumbnailWidth EQ 0), 75, ThumbnailWidth) />

有人会说出于性能原因应避免使用IIf()。在这个简单的情况下,我相信你会发现没有区别。 Ben Nadel的博客有more discussion on IIF() performancethe new ternary operator in CF 9

答案 1 :(得分:6)

我发现你的原始足够优雅 - 讲述故事,易于阅读。但这绝对是个人偏好。幸运的是,在CFML中总是至少有九种方法可以做任何事情。

你可以将它放在一行(CFML没有行尾要求):

<cfif ThumbnailWidth EQ 0><cfset Width = 75><cfelse><cfset Width = ThumbnailWidth></cfif>

你也可以使用IIF() Function - 它会起作用:

<cfset Width = IIf(ThumbnailWidth EQ 0, 75, ThumbnailWidth)>

这个结构有点奇怪' - 我觉得更清楚。 IIF()的强度在于它也可以在线使用(毕竟它是一个函数)。例如:

<img src="#ImageName#" width="#IIf(ThumbnailWidth EQ 0, 75, ThumbnailWidth)#">

最后一种形式通常用于在注入动态代码时保持干净(错误)的HTML布局。

答案 2 :(得分:2)

像尼尔说的那样,它的方式很好。如果你真的想要一行,你可以使用三元运算符作为cfscript,例如:

<cfscript>width = (ThumbnailWidth == 0) ? 75 : ThumbnailWidth;</cfscript>

尚未测试此代码,但它应该可以正常工作。

答案 3 :(得分:2)

如果您正在寻找简洁的代码,那么您可以比其他示例更进一步,利用CF对非零值的评估为true

<!--- CF 9 example --->
<cfset width = ThumbnailWidth ? ThumbnailWidth : 75> 

<!--- CF 8 and below --->
<cfset width = iif(ThumbnailWidth, ThumbnailWidth, 0)>

当然,你会牺牲一点清晰度,但这是更紧凑代码的权衡。

答案 4 :(得分:1)

我个人更喜欢这样的内容:

<cfscript>
  Width = ThumbnailWidth;
  if(NOT Val(Width)) // if the Width is zero, reset it to the default width.
    Width = 75;
</cfscript>