Question

En JavaScript, vous pouvez le faire:

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

Et 'result' obtiendra la valeur de 'b' car JavaScript court-circuite l'opérateur 'ou'.

Je veux un idiome à une ligne pour faire cela dans ColdFusion et le mieux que je puisse trouver est:

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

Quelqu'un peut-il faire mieux que cela?

Était-ce utile?

La solution

ColdFusion n'a pas de valeur NULL.

Votre exemple repose sur le choix de l'élément qui correspond à une chaîne vide.

Si c'est ce que vous recherchez et que toutes vos autres valeurs sont des valeurs simples, procédez comme suit:

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

(Ce qui fonctionne car les fonctions de liste standard ignorent les éléments vides.)

Autres conseils

Remarque: les autres moteurs CFML prennent en charge les valeurs NULL.

Si nous traitons réellement avec des valeurs NULL (et non des chaînes vides), voici une fonction qui fonctionnera pour Railo et 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>

Ensuite, utiliser la fonction est aussi simple que:

<cfset result = FirstNotNull( a , b , c ) />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top