有没有一种单行代码的方式来编写这个逻辑,使其更加简洁优雅?
<cfif ThumbnailWidth EQ 0>
<cfset Width = 75>
<cfelse>
<cfset Width = ThumbnailWidth>
</cfif>
<cfif ThumbnailWidth EQ 0>
<cfset Width = 75>
<cfelse>
<cfset Width = ThumbnailWidth>
</cfif>
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的博客讨论了IIF()的性能,以及CF 9中的新三元运算符。
<cfif ThumbnailWidth EQ 0><cfset Width = 75><cfelse><cfset Width = ThumbnailWidth></cfif>
你还可以使用IIF()函数 - 它能够解决问题:
<cfset Width = IIf(ThumbnailWidth EQ 0, 75, ThumbnailWidth)>
这个结构有点奇怪,我认为更清晰的方式是使用“?”和“:”。IIF()的优势在于它也可以内联使用(毕竟它是一个函数)。例如:
<img src="#ImageName#" width="#IIf(ThumbnailWidth EQ 0, 75, ThumbnailWidth)#">
IIf()
需要使用DE()
。 - Tomalak像Neil说的那样,目前的状态是可以的。如果你真的想要一行代码,你可以使用三元运算符将其转换为cfscript
:
<cfscript>width = (ThumbnailWidth == 0) ? 75 : ThumbnailWidth;</cfscript>
true
。<!--- CF 9 example --->
<cfset width = ThumbnailWidth ? ThumbnailWidth : 75>
<!--- CF 8 and below --->
<cfset width = iif(ThumbnailWidth, ThumbnailWidth, 0)>
我个人更喜欢这样的东西:
<cfscript>
Width = ThumbnailWidth;
if(NOT Val(Width)) // if the Width is zero, reset it to the default width.
Width = 75;
</cfscript>
//POST
width = form.ThumbnailWidth ?: 0;
//GET
width = url.ThumbnailWidth ?: 0;