2010-12-15 9 views
1

Gibt es einen logischen Unterschied zwischen den folgenden zwei Blöcken? Und gibt es eine Form, die korrekter ist als die andere? Sie würden beide in ihrer eigenen Funktion bleiben - etwas, das ich hier ausgelassen habe.Sind die folgenden zwei Codeblöcke logisch gleichwertig?

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

Und

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

Der zweite ist klarer, welches "Ergebnis" geändert wird und welches 'i' verwendet wird, also stimme ich für den zweiten Block. (Haftungsausschluss: Ich habe nie in Coldfusion codiert). – FrustratedWithFormsDesigner

+1

ColdFusion 9, nehme ich an? – ale

+0

Ja, Al. ColdFusion 9. – Mohamad

Antwort

7

Ja. In Ihrem zweiten Beispiel machen Sie genau das gleiche Ergebnis; Sie haben jedoch die Lesbarkeit verbessert, indem Sie den Bereich, den Sie ändern möchten, explizit angeben - was eine gute Sache ist.

ColdFusion, sucht zuerst den LOCAL-Bereich, so dass Sie ColdFusion nicht viel Verarbeitung gespeichert haben; Der Code ist jedoch jetzt sauberer. Wenn im CLIENT- oder COOKIE-Bereich ein Ergebnis vorhanden wäre, hätten Sie ColdFusion die Arbeit erspart, zuerst vier oder fünf andere Bereiche zu evaluieren.

Ich verwendete einmal das 'var result = 0;' Ich erkläre jetzt explizit alle meine Gültigkeitsbereiche, um sicherzustellen, dass ich alle Variablen richtig definiert habe und dass der Code für andere leichter verständlich ist.

Zusammenfassend ist der Code genau der gleiche für die Maschine, aber ist jetzt einfacher für den Menschen zu verstehen.

2

Ein Vorschlag ... Änderung:

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

zu

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

eine weniger Code-Zeile, noch deutlicher, was los ist.