DevTrain

Autor: Bernhard Elbl

"Dim" oder nicht "Dim"... in Classic ASP

Variablen Deklararation in ASP? Ist das eigentlich notwendig? Ob Sie jetzt eine Variable deklarieren oder nicht, ändert erstmal nichts am Datentyp selbst. Der EINZIGE Datentyp in ASP/VBScript ist und bleibt ein Variant. Trotzdem ändern sich ein paar Dinge, die dem Programmierer für erste unsichtbar bleiben. Abgesehen vom vorhanden Intellicence für alle die mit Visual Interdev entwickeln. Ausserdem macht Deklaration den Code eher weniger übersichtlich. Was steckt also dahinter?

Anhand von Beispiel-Code werde ich einige Vorteile der Variablen Deklaration zeigen. Aber erst ....
Eine kurze  Auflistung von Vorteilen...
1. Der Zugriff auf deklarierte Variablen ist um einiges schneller, weil der Variable eine ID zugewiesen wird. (Beispiel unten)
2. Nicht deklarierte Variablen sind immer "Public", das kann Fehler verursachen, die sehr schwer zu finden sind! (Beispiel unten)
3. Wer eine Variable falsch schreibt, erhält ohne "Option Explicit" keine Fehlermeldung, nur das Ergebnis ist falsch, oder der Fehler wird an der falschen Stelle im Code verursacht.

1. Beispiel: Deklarierte Variablen sind schneller.
Für dieses Beispiel habe ich eine kleine DLL geschrieben, die Zeitspannen in Millisekunden(fast) messen kann.
Eine simple "For Next" Wiederholung mit 1 Mil. durchläufen wird gemessen. Einmal mit Deklaration, einmal ohne.
<%
set oTimer = Server.CreateObject("Tracing.CTimer")

oTimer.StartTimer
dim x
for x = 0 to 1000000
next

Response.Write "<br>Test x:------------" & oTimer.StopTimer & "-------------------<br>"

oTimer.StartTimer
for i = 0 to 1000000
next
Response.Write "<br>Test i:------------" & oTimer.StopTimer & "-------------------<br>"
%>


Das Ergebnis:
Ein P3, 500 MH, 256 MB RAM benötigt für
- Test x ca. 440 Millisekunden (mit Deklaration)
- Test i ca. 770 Millisekunden (ohne Deklaration)

2. Beispiel:
Sehen wir uns folgenden Code an. Ein String soll 1000 mal ausgeben werden. Während der Wiederholung wird eine Funktion aufgerufen, die ebenfalls über eine Wiederholung den String umkehrt und als Wert zurück gibt.
--> also aus "regal" wird "lager"

Hier das Beispiel ohne Deklaration.
<%
sValue = "ppedv"
for i = 0 to 1000
 Response.Write BackwardStr(sValue) & cstr(i)
next

function BackwardStr(byval sString)
 lLenStr = len(sString)
 for i = lLenStr to 1
  sNewString = sNewString & mid(sString, i, 1)
 next
 BackwardStr = sNewString
end function
%>


Wer dieses Beispiel ausführt, wird lange auf ein Ergebnis warten, standardmässig 90 Sekunden, bis der Timeout eintritt. Das ganze ist eine Endloswiederholung, weil die Variable i ohne Deklaration als Public auch in der Funktion also in beiden "For Next"-Iterationen verwendet wird. Und jetzt stellen Sie sich den oben gezeigten relativ kurzen Code auf 6 Seiten Mega-Script verteilt vor...Gute Nacht!

Hier das Beispiel mit Deklaration.
<%
dim sValue
dim i
sValue = "regal"
for i = 0 to 1
 Response.Write BackwardStr(sValue) & cstr(i)
next

function BackwardStr(sString)
 dim lLenStr, sNewString
 dim i
 lLenStr = len(sString)
 for i = lLenStr to 1 step -1
  sNewString = sNewString & mid(sString, i, 1)
 next
 BackwardStr = sNewString
end function
%>


Dieses Beispiel bringt das gewünschte Ergebnis. i ist einmal Public und einmal in einer Funktion deklariert. Damit sind es also 2 unterschiedliche Variablen.

Schlussbemerkung:
Wer einfache Scripts schreibt, braucht nicht zwingend Variablen zu deklarieren. In grossen Scripts können Fehler vermieden oder leichter gefunden werden, wenn Variablen deklariert werden und mit "Option Explict" am Anfang der ASP-Seite gearbeitet wird.


Erfasst am: 08.07.2002 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=783
© Copyright 2003 ppedv AG - http://www.ppedv.de