Function - sehr sehr Anfänger

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Die_Chaosmaschine

Betreff: Function - sehr sehr Anfänger

BeitragSo, Nov 12, 2017 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag,

ich arbeite gerade das Buch von René Meyer "Spiele programmieren mit Blitz Basic" und bin auf S. 51 liegen geblieben: Function & globale Variablen.

Dabei wollen mir 2 Sachen noch nicht so recht in den Kopf:

1. zu seinem Beispiel:
Code: [AUSKLAPPEN]
; GLOBAL1.BB
A = 10
Print A
Print TestFuntion(A)
WaitKey
End
;
Function TestFunktion(B)
 Return A
End Function
...womit er den Unterschied von Local und Global erklärt. Die Ausgabe ist wie gewünscht
10
0
Soweit so gut. Wenn ich aber statt dem B das A als Variable verwende:
Code: [AUSKLAPPEN]
Function TestFunktion(A)
 Return A
End Function

ist die Ausgabe
10
10
Wozu dann also der Aufwand, Global A zu Beginn zu definieren, wenn es auch so geht?

2. Habe ich das richtig verstanden?

TestFunktion(A) ; A = Variable, die an die Funktion übergeben werden soll

Function TestFunktion(B); B = Variable, die an das Hauptprogramm zurück gegeben werden soll; und wenn dem so ist, warum funktioniert meine Abwandlung, aus B mach' A und dass statt der 0 die 10 ausgegeben wird?

Xeres

Moderator

BeitragSo, Nov 12, 2017 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Willkommen.

Funktionen können in BlitzBasic einen Rückgabewert haben. Wenn du in einer Funktion mehrere Werte errechnen/ändern wolltest, musst die in Global zugänglichen Variablen speichern.

Das Beispiel im Buch macht nicht so richtig deutlich, warum man das brauchen sollte.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Xaymar

ehemals "Cgamer"

BeitragSo, Nov 12, 2017 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Ich nehme mal den code den du selbst gepostet hast als Beispiel:

Code: [AUSKLAPPEN]
A = 10

Dies definiert A als Local, so dass diese nur im Hauptprogramm sichtbar ist.

Code: [AUSKLAPPEN]
Print A

Hier lässt du die lokale A ausgeben.

Code: [AUSKLAPPEN]
Print TestFunktion(A)

Hier lässt du den Rückgabewert der TestFunktion ausgeben, mit dem Argument A.

Code: [AUSKLAPPEN]
Function TestFunktion(B)
 Return A
End Function

Deine Funktion startet sofort ein neues "Scope", in dem die vorherige Local A nicht mehr sichtbar ist, aber der Parameter B ist sichtbar. Mit dem Return A lieferst du also den Wert einer nicht existierenden Variable zurück, welcher standardmäßig 0 ist.

Der Grund hier "Global A" anstatt "Local A" ist um mehrere Werte gleichzeitig zurückzugeben oder halt eben eine Globale Variable zu ändern. Dies ist nützlich in Blitz.

2. Ja, und nein. TestFunktion(A) ruft die Funktion auf und übergibt A als Argument, "Function TestFunktion(B)" definiert die Funktion und gibt dem Compiler vor das zum aufrufen mindestens ein Argument vorhanden sein muss. Der Rückgabewert wird durch das Return gesetzt, der Typ mithilfe der Symbole %, #, $ vor der offenen Klammer: "Function TestFunktion#(B)" gibt eine Float zurück.

Der Grund weshalb deine Abwandlung funktioniert ist dass du den Parameter B auf A umgeändert hast, wodurch "Return A" nun eine echte Variable hat zum auslesen und zurückgeben.
Warbseite
 

Die_Chaosmaschine

BeitragSo, Nov 12, 2017 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Das sind doch einmal Antworten, die keine Frage offen lassen. Dankeschön. Hoffentlich kann ich auch irgendwann einmal so fundiert und auf den Punkt gebracht Antworten geben.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group