ColdFusion: escolher primeiro valor não nulo a partir de uma lista
-
03-07-2019 - |
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?
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 ) />