Что вы можете сделать в ColdFusion в одну строку? - PullRequest
7 голосов
/ 16 декабря 2009

Есть ли способ написать эту логику в одной элегантной строке кода?

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

Ответы [ 5 ]

28 голосов
/ 16 декабря 2009

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 () следует избегать по соображениям производительности. В этом простом случае я уверен, что вы не найдете никакой разницы. В блоге Бена Наделя есть подробное обсуждение производительности IIF () и нового троичного оператора в CF 9 .

6 голосов
/ 16 декабря 2009

Я считаю ваш оригинал достаточно элегантным - рассказывает историю, легко читается. Но это определенно личное предпочтение. К счастью, в CFML всегда есть как минимум девять способов сделать что-либо.

Вы можете поместить это в одну строку (CFML не имеет требований конца строки):

<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)#">

Эта последняя форма часто используется для поддержания чистого (эр) макета HTML при внедрении динамического кода.

2 голосов
/ 12 апреля 2011

Если вы ищете краткий код, то вы можете сделать это на шаг дальше, чем другие примеры, воспользовавшись оценкой CF ненулевых значений как true:

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

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

Естественно, вы пожертвуете небольшой ясностью, но это компромисс для более компактного кода.

2 голосов
/ 16 декабря 2009

Как сказал Нейл, все в порядке. Если вы действительно хотите одну строку, вы можете сделать ее cfscript с троичным оператором, например:

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

Не проверял этот код, но он должен работать.

1 голос
/ 23 декабря 2009

Я лично предпочитаю что-то более похожее на это:

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