Funktionen und Prozeduren in VB

Werbung
Funktionen und Prozeduren in VB.NET
1. Funktionen: geben einen berechneten Wert zurück als Ergebnis
Function name (Parameter) As Typ
……
name = ………..
`Ergebnis der Berechnung wird der Funktion übergeben
Oder:
Return = ………
`auch so kann das Ergebnis der Funktion übergeben werden
End Function
Der Typ gibt an von welchem Datentyp das Ergebnis der Berechnung sein wird. Fehlt diese Angabe,
dann wird standardmäßig Object angenommen.
Der Code einer Funktion muss auf Modul oder Klassenebene definiert werden – nicht innerhalb einer
Prozedur.
Das Schlüsselwort Shared ist erforderlich, damit die Funktion in den Prozeduren des Moduls oder der
Klasse ohne Instanzierung aufrufbar wird.
Shared Function Brutto(ByVal Netto As Decimal, ByVal MwSt As
Decimal) As Decimal
Return CDec(Netto * (1.0 + MwSt / 100.0))
End Function
Netto und Mwst sind die Parameter, die zum Berechnen nötig sind für die Funktion.
Die Funktion könnte dann aufgerufen werden in einer Prozedur:
Preis = Brutto(Netto, MwSt)
Die Variablen Netto und MwSt müssen Werte enthalten und das Ergebnis, das die Funktion berechnet
und zurück liefert wird in der Variaben Preis gespeichert.
2. Prozeduren: arbeiten einfach Arbeitsaufträge ab
Sub Name (Parameter)
……..
End Sub
Auch Prozeduren werden innerhalb eines Moduls oder einer Klasse definiert. Man kann also keine
Prozedur innerhalb einer anderen Prozedur vereinbaren! Auf Klassenebene muss vor dem Wort Sub
auch noch Shared angegeben werden (z. B. Shared Sub ……. End sub)
Da eine Prozedur keinen Rückgabewert liefert muß auch kein Prozedurtyp angegeben werden. Die als
Parameter angegebenen Werte gelten innerhalb der Prozedur als lokale Variable.
In VB 2005 können Prozeduren mit oder ohne Call aufgerufen werden, die Parameter sind aber immer
in Klammern zu setzen.
3. Parameterübergabe
Allgemein:
Wenn Module in Prozeduren und Funktionen aufgeteilt werden, ist die Versuchung groß zum
Datentausch zwischen den Prozeduren private oder öffentliche Variablen zu verwenden.
Da dies aber zu Problemen führen kann, sollte der Austausch von Werten mittels Übergabe von
Parametern erfolgen!
a) Parameter und Argumente
Parameter werden bei der Definition einer Prozedur für die zu übergebenden Argumente eingesetzt:
Sub Gehalt
Dim Name as String
Dim Alter as Integer
Dim Gehalt as Currency
Name = „Müller“
Alter = 35
Gehalt = 2400
Call Drucken(Name, Alter, Gehalt, „Gehaltsliste“)
End sub
´Argumente
Sub Drucken (Name as String, Alter as Integer, Brutto as Currency, Kopf as String)
………
´Parameter
End sub
Beachten Sie:
Die
Namen der Variablen für die Parameterübergabe sind bedeutungslos, es müssen nur die
Datentypen übereinstimmen!
Wird
die Prozedur Drucken aufgerufen, ersetzt Visual Basic die Parameter durch die übergebenen
Argumente. Die Parameter werden innerhalb der jeweiligen Prozedur wie lokale Variablen behandelt
und sind demnach nur innerhalb der Prozedur gültig.
Eine Argumentenliste kann bestehen aus (durch Komma getrennt):
 Variablen
 Konstanten
 Ausdrücken
 Tabellen oder Tabellenelementen, denen linke und rechte Klammern folgen
 Die Parameterliste kann bestehen aus (durch Komma getrennt):
 Variablen (außer Strings fester Länge)
 Tabellen oder Tabellenelementen, denen linke und rechte Klammern folgen
Grundsätzlich kann zwischen zwei Varianten der Variablenübergabe gewählt werden:
Übergabe nach Wert (die aufgerufene Prozedur hat nur lesenden Zugriff auf die Argumente, kann
sie also nicht verändern)
Übergabe nach Referenz (die auch die Veränderung der übergebenen Argumente in der
aufgerufenen Prozdur erlaubt)
b) Übergabe nach Wert (call by value):
Ist die sicherere Variante, da keine Änderungen der übergebenen Variablen erlaubt sind.
Unterschiede gibt es beim Aufruf der Prozedur:
Call Test (Name, Alter) `nach Referenz
Call Test((Name),(Alter)) `nach Wert
Beachten Sie:
Wird
eine Prozedur aufgerufen, der ein Argument nach Wert übergeben wird, so wird ihr lediglich
eine Kopie des Wertes übergeben, nicht das Original.
Die übergebenen Variablen können dann zwar in der Unterprozedur verändert werden, aber nach
Rückkehr auf die aufgerufene Ebene erhalten sie wieder den ursprünglichen Wert.
Beispiel
Sub Berechnen
Dim Betrag as Currency
Betrag = 1000
Call Skonto((Betrag)) `Übergabe nach Wert
End sub
Sub Skonto(Betrag as Currency)
Debug.Print „3% Skonto von“; Betrag; „€ sind“; Betrag*.03; „€“)
End sub
Ergebnis: 3% Skonto von 1000 € sind 30 €
c) Übergabe nach Referenz (call by Reference)
Hier wird nur die Adresse des Wertes im Speicher (=Referenz) übergeben, wodurch es der Prozedur
möglich ist, den Inhalt der übergebenen Variablen auch auf der aufrufenden Ebene zu verändern.
Beispiel
Sub Berechnung
Dim Betrag as Currency
Dim Skonto as Currency
Betrag = 1000
Call Skonto(Betrag, Skonto) `nach Referenz
Debug.Print „3% Skonto von“; Betrag; „€ sind“; Skonto; „€“
End sub
Sub Skontorechnen(Betrag as Currency, Skonto as Currency)
Skonto = Betrag * .03
End sub
Beachten Sie:
Hier
werden nur die Adressen der Variablen Betrag und Skonto an die Prozedur Skontorechen
übergeben.
Somit weiß die Prozedur wo sich die Variablen im Speicher befinden und kann deren Wert auch
beeinflussen.
Dies ist hier auch notwendig, da der errechnete Skontobetrag ja an die aufrufende Prozedur
Berechung zurückgegeben werden muss, damit er mit ihr ausgedruckt werden kann.
d) Die Schlüsselwörter ByVal und ByRef
So kann im Kopf der Prozedur festgelegt werden, ob der Paramenter als Wert oder Referenz übergeben
werden soll.
ByRef muß nicht explizit angegeben werden.
ByVal kann bewirken, dass eine Prozedur, die standardmäßig per Referenz übergeben wird, das
errechnete Ergebnis nicht an die aufrufenden Prozedur übergeben kann.
Beispiel:
Sub Berechnung
Dim Betrag as Currency
Dim Skonto as Currency
Betrag = 1000
Call Skonto(Betrag, Skonto)
Debug.Print „3% Skonto von“; Betrag; „€ sind“; Skonto; „€“
End sub
Sub Skonto(Betrag as Currency, ByVal Skonto as Currency)
Skonto = Betrag * .03
End sub
e) Gemische Argumentenübergabe
Sub Berechnung
Dim Betrag as Currency
Dim Skonto as Currency
Betrag = 1000
Call Skonto((Betrag), Skonto)
`byVal und byRef
Debug.Print „3% Skonto von“; Betrag; „€ sind“; Skonto; „€“
End sub
Sub Skonto(Betrag as Currency, Skonto as Currency)
Skonto = Betrag * .03
Betrag = 0
End sub
Herunterladen