2010-12-15 97 views
1

Y a-t-il une différence logique entre les deux blocs suivants? Et y a-t-il une forme plus correcte que l'autre? Ils vivraient tous deux dans leur propre fonction - quelque chose que j'ai omis ici.Les deux blocs de code suivants sont-ils logiquement équivalents?

<cfset local.result = 1 /> 
    <cfset local.i = 1 /> 
    <cfloop from="1" to="5" index="i"> 
     <cfset result = result * i /> 
    </cfloop> 

Et

<cfset local.result = 1 /> 
    <cfset local.i = 1 /> 
    <cfloop from="1" to="5" index="i"> 
     <cfset local.result = local.result * local.i /> 
    </cfloop> 
+2

Le second est plus clair sur quel 'résultat' est en cours de modification et quel' i' est utilisé, donc je vote pour le second bloc. (Disclaimer: je n'ai jamais codé dans Coldfusion). – FrustratedWithFormsDesigner

+1

ColdFusion 9, je présume? – ale

+0

Oui, Al. ColdFusion 9. – Mohamad

Répondre

7

Oui. Dans votre deuxième exemple, vous faites exactement le même résultat; Cependant, vous avez amélioré la lisibilité en identifiant explicitement la portée que vous avez l'intention de modifier - ce qui est une bonne chose. ColdFusion, va d'abord chercher la portée LOCAL, donc, vous n'avez pas sauvé beaucoup de traitement de ColdFusion; Cependant, le code est plus propre maintenant. Si le résultat existait dans le champ CLIENT ou COOKIE, vous auriez sauvé ColdFusion d'avoir à évaluer d'abord quatre ou cinq autres portées.

J'ai déjà utilisé le 'var result = 0;' style de localisation de variables à une fonction, mais, maintenant, j'identifie explicitement toutes mes portées pour m'assurer que j'ai correctement défini toutes les variables et que le code est plus facile à comprendre pour les autres.

En résumé, le code est exactement le même pour la machine mais est maintenant plus facile à comprendre pour l'humain.

2

Une suggestion ... changement:

<cfset local.i = 1 /> 
<cfloop from="1" to="5" index="i"> 

à

<cfloop from="1" to="5" index="local.i"> 

une ligne de code moins, encore plus clairement ce qui se passe.