Les deux blocs de code suivant logiquement équivalent?
-
10-10-2019 - |
Question
Y at-il une différence logique entre les deux blocs suivants? Et est-il une forme plus correcte que l'autre? Ils seraient tous deux résider sur leur fonction -. Quelque chose que j'omis ici
<cfset local.result = 1 />
<cfset local.i = 1 />
<cfloop from="1" to="5" index="i">
<cfset result = result * i />
</cfloop>
<cfset local.result = 1 />
<cfset local.i = 1 />
<cfloop from="1" to="5" index="i">
<cfset local.result = local.result * local.i />
</cfloop>
La solution
Oui. Dans votre deuxième exemple, vous faites le résultat exact même; Cependant, vous avez une meilleure lisibilité en identifiant explicitement la portée vous avez l'intention de modifier -. ce qui est une bonne chose
ColdFusion, recherche d'abord la portée locale, donc, vous n'avez pas enregistré beaucoup de traitement ColdFusion; cependant, le code est plus propre maintenant. Si le résultat existait dans le client ou la portée COOKIE vous avez enregistré ColdFusion le travail d'avoir à d'abord évaluer quatre ou cinq autres champs d'application.
Une fois, je l'habitude d'utiliser le « résultat = 0 var; » style de localisant variables à une fonction, mais, je maintenant identifier explicitement tous mes champs d'application pour aider à assurer que j'ai correctement scope toutes les variables et rendre le code plus facile à comprendre pour les autres.
Pour résumer, le code est exactement la même chose à la machine, mais est maintenant plus facile à comprendre pour l'être humain.
Autres conseils
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 clair ce qui se passe.