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:

<cffunction name="showAuslastung" output="false" access="public" returntype="numeric">
<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:

<cffunction name="showAuslastung" output="false" access="public" returntype="numeric">
<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 var test = Now() />
<cfset local.morgen = DateAdd("d",1, local.test) />

Verwandte Blog-Einträge

Kommentare

Michael's Gravatar
in der aktuellen Version von Railo (3.1), erlaubt es railo (im admin) auch den local scope als default zu setzten, somit wird wenn kein scope definiert wird immer der local verwendet, erst wenn man "variables" explizit schreibt wird dieser verwendet.
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
# Erfasst von Michael | 15.07.09 10:25
Mischa's Gravatar
Dass man sich das var dann sparen kann, wusste ich nicht - danke für den Tipp also. Allerdings kann ich diese Abkürzung bei railo momentan auch nur nutzen, wenn ich davon ausgehen kann, dass die Applikation nicht auf anderen CF-Servern korrekt laufen muss. In diesem Sinn ist es natürlich doppelt zu begrüssen, dass Adobe hier euren Weg beschreitet.
# Erfasst von Mischa | 15.07.09 10:51
Leave this field empty
Ihren Kommentar hinzufügen

Falls Sie abonnieren, werden alle neuen Kommentare zu diesem Thema an Ihre E-Mail-Adresse gesandt.

TweetBacks