Local-Scope in Funktionen kommt mit CF9
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:
<cfargument name="objectID" default="0" required="yes" />
<cfset var heute= Now() />
<cfset var anzahl = 0 />
<cfset var qryGet = QueryNew("") />
<!--- tu es, tu es --->
<cfquery name="qryGet" ...
<!--- alles berechnete und fertig --->
<cfreturn anzahl />
</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:
<cfargument name="objectID" default="0" required="yes" />
<!--- tu es, tu es --->
<cfquery name="local.qryGet" ...
<!--- alles berechnete und fertig --->
<cfreturn local.anzahl />
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:
<cfset local.morgen = DateAdd("d",1, local.test) />
TrackBacks
Trackback URL dieses Eintrages:
http://www.samelis.ch/blog/mischa/trackback.cfm?id=9397B6C9-D38C-41BA-A7898AB202CAE74C
Kommentare
somit kann man sich var und local ersparen. den local scope wie cf9 ihn hat, werden wir für railo 3.2 einführen.
Gruss Michael