» Start & Installation » ASP-Grundlagen » VBScript » Datenbanken » Erweiterte Techniken » Fehlercode-Suche » FAQ » Forum für aspfehlercodes » ASP » JavaScript » ASCII & ANSI » HTTP-Statuscodes » Codepage » LCID » VBScript » JScript
|
Link: Wichtiger Hinweis in eigener Sache!
Ruft man einen gleichen Programmcode immer wieder aus verschiedenen Stellen des Programms auf, so kann es sich lohnen, diesen Programmcode in eine Prozedur auszulagern. Damit es z.B. möglich ist, aus den unterschiedlichsten Positionen innerhalb des Programms bestimmte Programmabläuf abzurufen.
Stellen Sie sich ein Programm vor, das rund 200 Zeilen gross ist, darum geht es z.B. um eine Anrede "Herr,Frau,Firma". Also eine If-Abfrage, mit 3 unterschiedlichen HTML-Code. Aber: bei rund 200 Zeilen wird es schwierig, den Überblick zu behalten, wo ist die If-Abfrage, wo der ASP/HTML-Code? Um die Übersichtlichkeit zu erhöhen bzw. zu erhalten, werden die entsprechenden Programmteile einfach in Prozeduren ausgelagert. Bei kleinen Programmen ist der Vorteil einer Auslagerung nicht sehr gross, bei grossen bis sehr grossen Programmen aber ist eine deratige Auslagerung fast lebenswichtig. Es gibt 2 Prozedurarten: Function und Sub.
Der Unterschied zwischen einer Function und einer Sub ist recht einfach: Eine Function hat einen Rückgabewert, eine Sub nicht. Ruft man also eine Function auf, so gibt diese Function z.B. einen Text an die aufgerufene Stelle zurück. Ein sehr einfaches Beispiel für eine Sub und eine Function:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <% @ Language="VBScript" %><% Option Explicit
'Aufruf der Sub Call Textbeginn()
'Schreiben des Ergebnisses aus der Function Response.Write(Addition())
'Sub, die einen Text schreibt Public Sub Textbeginn() Response.Write("Das Ergebnis der Addition 2+2 ist:") End Sub
'Function, die eine einfache Addition durchführt Public Function Addition() Addition = 2 + 2 End Function %> |
Bei der Variablendeklaration gibt es Private und Public. Dies gibt es auch bei einer Function und Sub, setzt man z.B. ein Private vor einer Sub, so sollte diese Sub aus einem anderen Modul heraus nicht mehr sichtbar sein. Allerdings ist das die Theorie, in der VBScript-Praxis sind diese Grenzen sehr gering oder nicht vorhanden. Dennoch möchte ich darauf hinweisen, daß Private und Public verwendet werden soll. Zum einen wegen der Programmierdisziplin, der Programmcode wird auch lesbarer. Dazu funktioniert eine Kapselung durch Private und Public in echten Programmiersprachen sehr gut.
Was ist, wenn man einer Sub oder Function einen Wert übergeben möchte, das geht natürlich wie aus anderen Programmiersprachen gewohnt recht einfach, dabei gibt es 3 Möglichkeiten, ByRef, ByVal oder ohne Angabe. Bei ByRef wird die Variable als Verweis übergeben(bzw. eine Adresse wird übergeben), wird eine Wertänderung der Variablen innerhalb einer Sub/Function durchgeführt, wird diese Wertänderung auch im Hauptprogramm bzw. in der aufrufenden Stelle durchgeführt.
Eine Argumentenübergabe als Wert wird per ByVal durchgeführt. Eine Wertänderung der Variablen bei der aufrufenden Stelle kann nicht durchgeführt werden. Heisst: Wenn der Variablenwert geändert wird, hat dies nur lokale (also in der entsprechenden Sub/Function) Auswirkungen. Standardmässig wird ein Wert bei Nichtangabe von ByRef und ByVal als Verweis, also ByRef übergeben.
Was aber ist optimal, ByRef oder ByVal? Lt. Microsoft sollte ByVal besser als ByRef sein. Allerdings zeigt die Erfahrung etwas anderes: Wird ByVal verwendet, wird hierfür gesondert Platz im Arbeitsspeicher benötigt. ByRef hingegen übergibt nur eine Adresse der Variablen, der Arbeitsspeicherverbrauch ist hier also geringer. Eine Wertübergabe per ByRef sollte deshalb vorgezogen werden, entweder geben Sie ByRef explizit an, oder sie machen keine Angabe von ByVal oder ByRef.
Beispiel für ByVal und ByRef:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <% @ Language="VBScript" %> <% Option Explicit %> <% 'Deklarieren und Wertzuweisung der Variablen Dim Zahl1, Zahl2, Zahl3 Zahl1 = 2 Zahl2 = 2 Zahl3 = 2
'Aufruf der Sub Call Textbeginn()
'Schreiben des Ergebnisses aus der Function Response.Write(Addition(Zahl1, Zahl2, Zahl3))
'Welche Werte haben die Variablen jetzt? Response.Write("<br />Zahl1 ist:" & Zahl1) Response.Write("<br />Zahl2 ist:" & Zahl2) Response.Write("<br />Zahl3 ist:" & Zahl3)
'Sub, die einen Text schreibt Public Sub Textbeginn() Response.Write("Das Ergebnis der Addition Zahl1+Zahl2+Zahl3 ist: ") End Sub
'Function, die eine einfache Addition durchführt Function Addition(ByRef Arg1, ByVal Arg2, Arg3) Addition = Arg1 + Arg2 + Arg3 Arg1 = 4 Arg2 = 4 Arg3 = 4 End Function %> |
Das Ergebnis dieses Programms, in der Sie die Wirkung der ByVal und ByRef-Übergabe deutlich sehen können, auch eine Wertübergabe ohne die ByRef und ByVal-Angabe wird aufgezeigt. Auch hierbei gilt: Die Programmierdisziplin und eine bessere lesbarkeit des Codes (auch für andere Programmierer) sollte hier als Anstoss gelten, die Angaben ByVal und ByRef anzugeben. Das Ergebnis aus dem vorangegangem Programm:
1 2 3 4
| Das Ergebnis der Addition Zahl1+Zahl2+Zahl3 ist: 6 Zahl1 ist:4 Zahl2 ist:2 Zahl3 ist:4 |
|
|