Pergunta

Em JavaScript, você pode fazer isso:

var a = null;
var b = "I'm a value";
var c = null;
var result = a || b || c;

E 'resultado' terá o valor de 'b', porque o JavaScript curtos-circuitos a 'ou' operador.

Eu quero um idioma de uma linha para fazer isso em ColdFusion e o melhor que posso dar é:

<cfif LEN(c) GT 0><cfset result=c></cfif>
<cfif LEN(b) GT 0><cfset result=b></cfif>
<cfif LEN(a) GT 0><cfset result=a></cfif>

Alguém pode fazer melhor do que isso?

Foi útil?

Solução

ColdFusion não tem valores nulos.

Seu exemplo está baseando a escolha do item que é uma cadeia vazia.

Se é isso que você está depois, e todos os seus outros valores são valores simples, você pode fazer isso:

<cfset result = ListFirst( "#a#,#b#,#c#" )/>

(que funciona porque as funções de lista padrão ignorar elementos vazios.)

Outras dicas

Nota:. Outros motores CFML fazer apoio nulos

Se realmente está lidando com valores nulos (e não strings vazias), aqui é uma função que irá trabalhar para Railo e OpenBlueDragon:

<cffunction name="FirstNotNull" returntype="any" output="false">
    <cfset var i = 0/>
    <cfloop index="i" from="1" to="#ArrayLen(Arguments)#">
        <cfif NOT isNull(Arguments[i]) >
            <cfreturn Arguments[i] />
        </cfif>
    </cfloop>
</cffunction>

Depois de usar a função é tão simples como:

<cfset result = FirstNotNull( a , b , c ) />
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top