Pregunta

En JavaScript, puedes hacer esto:

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

Y 'resultado' obtendrá el valor de 'b' porque JavaScript cortocircuita el 'o' operador.

Quiero un idioma de una línea para hacer esto en ColdFusion y lo mejor que puedo hacer es:

<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>

¿Puede alguien hacer algo mejor que esto?

¿Fue útil?

Solución

ColdFusion no tiene nulos.

Su ejemplo es basar la elección en qué elemento es una cadena vacía.

Si eso es lo que está buscando, y todos sus otros valores son valores simples, puede hacer esto:

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

(Lo que funciona porque las funciones de lista estándar ignoran los elementos vacíos).

Otros consejos

Nota: otros motores CFML admiten nulos.

Si realmente estamos tratando con nulos (y no con cadenas vacías), aquí hay una función que funcionará para Railo y 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>

Luego, usar la función es tan simple como:

<cfset result = FirstNotNull( a , b , c ) />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top