Local-Scope in Funktionen kommt mit CF9

Mischa Sameli, Geschäftsführer & Leiter Entwicklung

Endlich kommt der local-Scope für Funktionen in ColdFusion, wie dem Blog von Ben Forta zu entnehmen ist. CF9, aka Centaur, liefert diese Neuerung, die einiges an Tipp-Arbeit erleichtert und die ganze Scoping-Geschichte vereinheitlicht.

Bislang mussten bei Adobes ColdFusion lokale Variablen innerhalb von Funktionen immer ganz zuoberst, also gleich nach der Auflistung der Argumente initialisiert werden:

1<cffunction name="showAuslastung" output="false" access="public" returntype="numeric">
2<cfargument name="objectID" default="0" required="yes" />
3<cfset var heute= Now() />
4<cfset var anzahl = 0 />
5<cfset var qryGet = QueryNew("") />
6<!--- tu es, tu es --->
7<cfquery name="qryGet" ...
8<!--- alles berechnete und fertig --->
9<cfreturn anzahl />
10</cffunction>
Railo versteht die "var"-Anweisung immerhin schon überall innerhalb einer Funktion – ist aber trotzdem noch darauf angewiesen. Neu kann dies ohne den var-Block geschrieben werden:
1<cffunction access="public" name="showAuslastung" output="false" returntype="numeric"> <cfargument name="objectID" default="0" required="yes" /><!--- tu es, tu es ---><cfquery ...="" name="local.qryGet"><!--- alles berechnete und fertig ---><cfreturn anzahl /></cfquery>
Eine Fehlerquelle weniger, indem man nicht mehr vergisst, alle lokalen Variablen auch in den Var-Scope zu setzen, der eben kein eigentlicher Scope ist. Dafür leidet natürlich aber auch ein wenig die Übersichtlichkeit in Bezug auf die lokal verwendeten Variablen. Auf jeden Fall ist die Geschichte abwärtskompatibel. Will heissen, Code, in dem die "var"-Anweisung verwendet wird, funktioniert weiterhin. Und Variablen, die mit var in den local-Scope gesetzt werden, sind auch über den local-Scope abrufbar. Folgendes sollte nun also funktionieren, auch wenn das Beispiel natürlich nicht gerade viel Sinn ergibt:
1<cfset var test = Now() /><cfset local.morgen = DateAdd("d",1, local.test) />