ColdFusion: seleziona il primo valore non nullo da un elenco
-
03-07-2019 - |
Domanda
In JavaScript, puoi farlo:
var a = null;
var b = "I'm a value";
var c = null;
var result = a || b || c;
E 'risultato' otterrà il valore di 'b' perché JavaScript mette in corto circuito l'operatore 'o'.
Voglio che un linguaggio a una riga faccia questo in ColdFusion e il meglio che posso inventare è:
<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>
Qualcuno può fare di meglio?
Soluzione
ColdFusion non ha valori null.
Il tuo esempio si basa sulla scelta su quale elemento è una stringa vuota.
Se questo è ciò che stai cercando e tutti gli altri valori sono valori semplici, puoi farlo:
<cfset result = ListFirst( "#a#,#b#,#c#" )/>
(Funziona perché le funzioni dell'elenco standard ignorano gli elementi vuoti.)
Altri suggerimenti
Nota: altri motori CFML supportano null.
Se abbiamo davvero a che fare con null (e non stringhe vuote), ecco una funzione che funzionerà per 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>
Quindi usare la funzione è semplice come:
<cfset result = FirstNotNull( a , b , c ) />