Что можно сделать в ColdFusion в одной строке?

Существует ли способ записать эту логику в единственной, изящной строке кода?

<cfif ThumbnailWidth EQ 0>
   <cfset Width = 75>
<cfelse>
   <cfset Width = ThumbnailWidth>
</cfif>
7
задан Phillip Senn 16 December 2009 в 16:16
поделиться

4 ответа

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 .

28
ответ дан 6 December 2019 в 05:06
поделиться

Я считаю ваш оригинал достаточно элегантным - он рассказывает историю, легко читается. Но это определенно личное предпочтение. К счастью, в 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)#">

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

6
ответ дан 6 December 2019 в 05:06
поделиться

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

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

Этот код не тестировался, но он должен работать.

2
ответ дан 6 December 2019 в 05:06
поделиться

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

<cfscript>
  Width = ThumbnailWidth;
  if(NOT Val(Width)) // if the Width is zero, reset it to the default width.
    Width = 75;
</cfscript>
1
ответ дан 6 December 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: