BlitzBasic: Return

Aus Wikibooks

Hinweis[Bearbeiten]

Die Anweisung »Return« hat drei Bedeutungen, das sie in drei unterschiedlichen Formen mit gleicher Schreibweise verwendet werden kann.

  1. Als Abbruch einer Function mit opionalem Rückgabewert
  2. Zur Rückkehr aus einem Unterprogramm, das mit Gosub aufgerufen wurde.
  3. Zum Beenden des Hauptprogramms mit der Runtime Message "Program has ended" (so als wäre das Ende des Code erreicht)

Syntax[Bearbeiten]

  1. Return [Wert]
  2. Return
  3. Return

Parameter[Bearbeiten]

  1. eine optionale Variable vom Rückgabedatentyp der Funktion
  2. kein
  3. kein

Rückgabe[Bearbeiten]

kein

Beschreibung[Bearbeiten]

  1. »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)
  2. »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)
  3. »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....