Существует ли способ записать эту логику в единственной, изящной строке кода?
<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 () следует избегать из соображений производительности. В этом простом случае, я уверен, вы не заметите разницы. В блоге Бена Надела больше обсуждается производительность IIF () и новый тернарный оператор в CF 9 .
Я считаю ваш оригинал достаточно элегантным - он рассказывает историю, легко читается. Но это определенно личное предпочтение. К счастью, в 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-макета при внедрении динамического кода.
Как сказал Нил, все в порядке. Если вам действительно нужна одна строка, вы можете превратить ее в cfscript
с тернарным оператором, например:
<cfscript>width = (ThumbnailWidth == 0) ? 75 : ThumbnailWidth;</cfscript>
Этот код не тестировался, но он должен работать.
Лично я предпочитаю что-то более похожее на это:
<cfscript>
Width = ThumbnailWidth;
if(NOT Val(Width)) // if the Width is zero, reset it to the default width.
Width = 75;
</cfscript>