|
Navigation: Compiler > BASIC > Funktionen |
![]() ![]()
|
Um größere Programme zu strukturieren, teilt man sie in mehrere Unterfunktionen auf. Dies erhöht nicht nur die Lesbarkeit, sondern erlaubt es Programmanweisungen, die mehrfach vorkommen, in Funktionen zusammenzufassen. Ein Programm besteht immer aus der Funktion "main", die als allererstes gestartet wird. Danach kann man von main aus andere Funktionen aufrufen. Ein einfaches Beispiel:
Sub func1()
' Anweisungen in Funktion func1
.
.
End Sub
Sub main()
' die Funktion func1 wird zweimal aufgerufen
func1()
func1()
End Sub
Parameterübergabe
Damit Funktionen flexibel nutzbar sind, kann man sie parametrisieren. Hierfür werden in der Klammer nach dem Funktionsnamen die Parameter für die Funktion durch Komma getrennt übergeben. Man gibt ähnlich wie in der Variablendeklaration erst den Parameternamen, und danach den Datentyp an. Will man keinen Parameter übergeben, so läßt man die Klammer leer. Ein Beispiel:
Sub func1(param1 As Word, param2 As Single)
Msg_WriteHex(param1) ' den ersten Parameter ausgeben
Msg_WriteFloat(param2) ' den zweiten Parameter ausgeben
End Sub
Wie lokale Variablen sind übergebene Parameter nur in der Funktion selber sichtbar.
Um die Funktion func1 mit den Parametern aufzurufen, schreibt man beim Aufruf die Parameter in der gleichen Reihenfolge, wie sie bei func1 definiert wurden. Bekommt die Funktion keine Parameter, läßt man die Klammer leer.
Sub main()
Dim a As Word
Dim f As Single
func1(128,12.0) ' man kann numerische Konstanten übergeben ...
a=100
f=12.0
func1(a+28,f) ' oder aber auch Variablen und sogar numerische Ausdrücke
End Sub
Man muß bei dem Aufruf einer Funktion immer alle Parameter angeben. Folgende Aufrufe wären unzulässig:
func1() ' func1 bekommt 2 Parameter!
func1(128) ' func1 bekommt 2 Parameter!
Rückgabeparameter
Es ist nicht nur möglich, Parameter zu übergeben, eine Funktion kann auch einen Rückgabewert haben. Den Datentyp dieses Wertes gibt man bei der Funktionsdefinition hinter der Parameterliste der Funktion an.
Sub func1(a As Integer) As Integer
Return a-10
End Sub
Der Rückgabewert wird innerhalb der Funktion mit der Anweisung "Return Ausdruck" angegeben. Hat man eine Funktion ohne Rückgabewert, so muß man die Return Anweisung ohne Parameter anwenden, um die Funktion zu verlassen.
Referenzen
Da es nicht möglich ist, Arrays als Parameter zu übergeben, kann man auf Arrays über Referenzen zugreifen. Dafür schreibt man in der Parameterdeklaration einer Funktion das Attribut "ByRef" vor den Parameternamen:
Sub StringLength(ByRef str As Char) As Integer
Dim i As Integer
i=0
Do While str(i)
i=i+1 ' wiederhole solange Zeichen nicht null
End While
Return i
End Sub
Sub main()
Dim Len As Integer
Dim Text(15) As Char
Text="hallo welt"
Len=StringLength(Text)
End Sub
In main wird die Referenz von Text als Parameter an die Funktion StringLength übergeben. Ändert man in einer Funktion einen normalen Parameter, so ist die Änderung außerhalb dieser Funktion nicht sichtbar. Bei Referenzen ist dies anders. Über den Parameter str kann man in StringLength den Inhalt von text ändern, da str nur eine Referenz (ein Zeiger) auf die Array Variable text ist.
Man kann zur Zeit nur Arrays "by Reference" übergeben!
Strings als Argument
Seit Version 2.0 der IDE kann man nun Funktionen mit einem String als Argument aufrufen. Die aufgerufene Funktion bekommt die Zeichenkette als Referenz übergeben. Da aber Referenzen im RAM stehen müssen, und vordefinierte Zeichenketten im Flashspeicher stehen, erzeugt der Compiler intern vor Aufruf der Funktion einen anonymen Speicherplatz auf dem Stack und kopiert die Daten aus dem Flash dorthin.
Sub StringLength(ByRef str As Char) As Integer
....
End Sub
Sub main()
Dim Len As Integer
Len=StringLength("hallo welt")
End Sub