Inhaltsverzeichnis
10.5.7 GoSub
Die 'GoSub'-Anweisung existiert in Gambas seit der Version 3.1.
10.5.7.1 GoSub-Syntax
Es wird bedingungslos zu einem Label gewechselt, das an einer anderen Stelle in der Funktion oder Prozedur erklärt ist. Wenn in den Anweisungen unter dem Ziel(-Label) eine Return-Anweisung steht, kehrt das Programm zurück, um den Code unmittelbar nach der GoSub-Anweisung auszuführen.
GoSub Label * Anweisung(en) ' → Programm-Fortsetzung nach RETURN Label: Anweisung(en) RETURN …
10.5.7.2 Hinweise zur Syntax
- Um nach den Anweisungen unter dem Ziel(-Label) Label: nach * zurückzukehren, müssen Sie die Return-Anweisung – allein auf einer Zeile stehend – verwenden.
- Sie können aber kein Return einsetzen, um ein Unterprogramm zu verlassen, das zwischen Label: und dem GoSub-Return notiert ist. Ein kleines Ärgernis – aber nicht zu ändern.
- GoSub-Aufrufe können verschachtelt werden.
10.5.7.3 Beispiel 1
Im Kapitel → 16.10 HistoryBox wird eine TextBox um die History-Eigenschaft erweitert, um eine bestimmte Anzahl von Eingaben temporär zu speichern.
In der folgenden TextBox_KeyPress()-Prozedur wird zum Beispiel der gleiche Quelltextabschnitt von Zeile 17-19 zwei mal an unterschiedlichen Stellen (Zeile 6 und Zeile 10) verwendet:
[1] Public Sub TextBox_KeyPress() [2] [3] If Not $hHistory Then Return [4] Select Key.Code [5] Case Key.Up [6] GoSub UPDATE_HISTORY [7] Inc $iCurrent [8] Goto UPDATE_TEXTBOX [9] Case Key.Down [10] GoSub UPDATE_HISTORY [11] Dec $iCurrent [12] Goto UPDATE_TEXTBOX [13] End Select [14] Return [15] [16] UPDATE_HISTORY: [17] If $iCurrent = -1 Then Return [18] $hHistory[$iCurrent] = Super.Text [19] Raise HistoryChange [20] RETURN [21] [22] UPDATE_TEXTBOX: [23] If $iCurrent = -2 Then Inc $iCurrent [24] If $iCurrent = -1 Then [25] Super.Clear() [26] Return [27] Endif [28] If $iCurrent >= $hHistory.Size Then Dec $iCurrent [29] Super.Text = $hHistory[$iCurrent] [30] Return [31] [32] End
- Den GoSub-Anweisungen in den Zeilen 6 und 10 folgen unbedingte Sprünge zum Ziel(-Label) in der Zeile 16. Nach den Anweisungen in den Zeilen 17-19 folgt in der Zeile 20 mit RETURN der Rücksprung in die Zeile 7 beziehungsweise 11.
- Das Return in den Zeilen 3, 14, 17, 26 und 30 bewirkt ein Verlassen der TextBox_KeyPress()-Prozedur!
Ein weiteres Beispiel für die Verwendung der GoSub-Anweisung bietet das Projekt Pong von Tobias Boege aus den Beispiel-Projekten von Gambas in der Kategorie Spiele.
