BlitzBasic: Return
Hinweis
[Bearbeiten]Die Anweisung »Return« hat drei Bedeutungen, das sie in drei unterschiedlichen Formen mit gleicher Schreibweise verwendet werden kann.
- Als Abbruch einer Function mit opionalem Rückgabewert
- Zur Rückkehr aus einem Unterprogramm, das mit Gosub aufgerufen wurde.
- Zum Beenden des Hauptprogramms mit der Runtime Message "Program has ended" (so als wäre das Ende des Code erreicht)
Syntax
[Bearbeiten]- Return [Wert]
- Return
- Return
Parameter
[Bearbeiten]- eine optionale Variable vom Rückgabedatentyp der Funktion
- kein
- kein
Rückgabe
[Bearbeiten]kein
Beschreibung
[Bearbeiten]- »Return« bietet die einzige Möglichkeit, innerhalb der Blockanweisung Function einen Local definierten Wert zurück zu geben. Der Datentyp des Wertes muss dabei mit dem Datentyp der Funktion identisch sein. Mit »Return« wird die Funktion abgebrochen. (siehe Beispiele)
- »Return« beendet ein Unterprogramm, dass mit Gosub aufgerufen wurde. Diese Form, Programmteile mehrfach nutzbar zu machen, ist veraltet und wurde genutzt, bevor es die Möglichkeit gab, Funktionen zu definieren. »Gosub/Return« ist nur noch in Blitz2D enthalten, um eine vollständige Kompatibilität für älteren Programm-Code zu gewährleisten. Trotzdem sind nicht alle Möglichkeiten von »Gosub/Return« mit Funktionen ersetzbar. (siehe Beispiele)
- »Return« ohne »Gosub« im Hauptprogramm beendet das Programm. Im Gegensatz zum Beenden mit End wird jedoch die Meldung "Program has ended" ausgegeben, die sich nicht unterdrücken lässt. Leider ist es auch nicht möglich, einen Wert zurück zu geben, was bei Verwendung von ExecFile hilfreich wäre.
Beispiele
[Bearbeiten]Return in einer Funktion
[Bearbeiten]Beispiel-Funktion 1: WaitJoy duch eigene Funktion ersetzen
[Bearbeiten]WaitJoy ist bei Blitz3D undokumentiert und bei BlitzPlus/BlitzMax nicht vorhanden.Da der Name der Funktion kein reserviertes Keyword ist, kann man ihn für eine eigene Funktion verwenden. So kann die Funktion bei jeder Blitzbasic-Version ohne Einschränkung verwendet werden. (»Return« steht erst am Ende)
Function WaitJoy(Port%=-1) Local Hit%,Count% FlushJoy ;Counter für Joytasten löschen If Port<0 Then ;wurde Port weggelassen? If JoyType() Then ;ist irgend ein Joystick angeschlossen? While Hit=0 ;warten solange bis ein Button an beliebigem Joystick betätigt wird For Count=1 To 20 ;20 Buttons dürften für jedes Gamepad reichen If JoyHit(Count)>0 Then Hit=Count Next Wend EndIf Else ;der Port wurde angegeben If JoyType(Port) Then ;ist ein Joystick an dem Port angeschlossen? While Hit=0 ;warten solange bis ein Button an dem Joystick betätigt wird For Count=1 To 20 ;20 Buttons dürften für jedes Gamepad reichen If JoyHit(Count)>0 Then Hit=Count Next Wend EndIf EndIf Return Hit ;Nummer des Button zurück geben End Function
Beispiel-Funktion 2: Octalstring erstellen
[Bearbeiten]Es gibt zwar bei Blitzbasic eine Funktion Hex (Hexadecimale Ausgabe) und eine Funktion Bin (Binäre Ausgabe), aber keine Funktion für eine oktale Ausgabe. Aber das läßt sich schnell ändern mit einer Oct-Funktion:
Function Oct$(Wert%) Local Back$,Bits% While Wert ;solange Wert ungleich 0 ist Bits=Wert And 7 ;unterste 3 Bit ausfiltern Back=Bits+Back ;Rückgabe von hinten nach vorne aufbauen Wert=Wert Shr 3 ;Wert um 3 Bits verschieben Wend Return Back Print "Jetzt warte mal 2 Tage! Ha,Ha,Ha" Delay 172800000 End Function
Hier habe ich mir erlaubt, einen Scherz einzubauen: Am Ende der Funktion steht ein Delay von 172800000 Millisekunden=48 Stunden. Aber da die Funktion mit »Return« beendet wird, wird alles nach »Return« niemals ausgeführt.
wird noch erweitert....