Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/android-studio/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ColdFusion中,您可以在一行中做什么?_Coldfusion - Fatal编程技术网

在ColdFusion中,您可以在一行中做什么?

在ColdFusion中,您可以在一行中做什么?,coldfusion,Coldfusion,有没有一种方法可以在一行优雅的代码中编写这种逻辑 <cfif ThumbnailWidth EQ 0> <cfset Width = 75> <cfelse> <cfset Width = ThumbnailWidth> </cfif> 就像尼尔说的那样,事情就是这样。如果您真的想要一行,可以使用三元运算符将其设置为cfscript,如: <cfscript>width = (ThumbnailWidth ==

有没有一种方法可以在一行优雅的代码中编写这种逻辑

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

就像尼尔说的那样,事情就是这样。如果您真的想要一行,可以使用三元运算符将其设置为
cfscript
,如:

<cfscript>width = (ThumbnailWidth == 0) ? 75 : ThumbnailWidth;</cfscript>
width=(ThumbnailWidth==0)?75:指钉宽度;
尚未测试此代码,但它应该可以工作。

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) />


有人会说,出于性能原因,应该避免这样做。在这个简单的例子中,我相信你会发现没有什么不同。Ben Nadel的博客有和。

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

您可以将其放在一行上(CFML没有行尾要求):


您还可以使用-它将实现以下功能:

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

这个结构有点奇怪,但我认为更清楚。IIF()的优点在于它也可以内联使用(毕竟它是一个函数)。例如:

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


最后一个表单通常用于在注入动态代码时保持干净(er)的HTML布局。

我个人更喜欢这样:

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

宽度=指钉宽度;
if(NOT Val(Width))//如果宽度为零,则将其重置为默认宽度。
宽度=75;

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

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

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


当然,您会牺牲一点清晰度,但这是对更紧凑代码的折衷。

现有代码有什么问题?单线!=优雅。这取决于你是否认为简洁=优雅。众说纷纭。@anon,显然你还没有发现许多语言支持的三元运算符。有没有人知道在CF9版本中我是否可以使用==而不是EQ?我猜使用EQ仍然是CF的最佳实践,因为它是向后兼容的,但在这种情况下并不重要。在实际实践中,为了代码的可维护性,我会用一个可以在配置文件中设置的变量替换硬编码的75。是的,您可以使用==,但有些运算符有“>”或“我相信
IIf()
需要使用
DE()
@Tomalak:我认为在这种情况下不需要它,因为我们传递的是整数而不是字符串。(来源:)确切地说-DE()是“延迟评估”——这可能是使用IIF()时最容易混淆的部分。默认情况下,将对IIF()的每个子句进行求值(就像在Evaluate()函数中一样)。如果这不是您想要的,那么您必须使用DE()-但是在本例中,这些是简单的表达式,所以不重要。使用它不会有什么坏处,但它不是必需的。
<!--- CF 9 example --->
<cfset width = ThumbnailWidth ? ThumbnailWidth : 75> 

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