Wie funkioniert das mit den Funktionen ?
Übersicht

Gehe zu Seite Zurück 1, 2, 3 Weiter
![]() |
Bura.Tino |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh Entschuldigung großer Meister das ich in einem Forum nochmal nachfrage, wenn ich etwas noch nicht verstanden habe. Hätte ich in einem Forum natürlich nicht machen dürfen. *unwürdigist* ![]() |
||
![]() ![]() |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Welche Variablen werden überschrieben? Selbst wenn a und b global sind dürften sie nicht überschrieben werden. Va und Vb logischerweise schon.
Also was ist jetzt dein Problem mit den Funktionen? *edit* Dennoch solltest du in der Funktion keine Globalen Variablennamen deklarieren. Also schreib einfach (wenn Va, Vb, a und b global): Code: [AUSKLAPPEN] Function Test()
Va=a+1 Vb=b+2 End Function |
||
- Zuletzt bearbeitet von NightPhoenix am Do, Dez 17, 2009 16:22, insgesamt 4-mal bearbeitet
![]() |
Bura.Tino |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ging darum wieso Va und Vb überschrieben sind. Das schien mir nicht ganz logisch. | ||
![]() ![]() |
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Va und Vb müssen global sein damit du sie in einer Function weiter verwenden kannst.
Wenn sie nur lokal in der Hauptschleife sind so musst du sie der Function übergeben. Code: [AUSKLAPPEN] Function Test(Va,Vb)
Va=... Vb=... End Function Wenn du das nicht tust sind diese innerhalb der Function sozusagen neue Variablen mit einem Wert gleich 0. |
||
![]() |
Bura.Tino |
![]() Antworten mit Zitat ![]() |
---|---|---|
@NightPhoenix
Das ist mir natürlich klar. Deswegen hatte ich sie ja am Anfang globalisiert. |
||
![]() ![]() |
- Zuletzt bearbeitet von Bura.Tino am Do, Dez 17, 2009 16:41, insgesamt einmal bearbeitet
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann hättest du diese Frage nicht stellen dürfen wenn alles klar ist. Zitat: Dennoch würde ich gerne verstehen wieso die Variablen überschrieben werden !?
Va und Vb sind global, also werden sie auch in der Function verändert und bleiben auch für "außerhalb der Function" so verändert, weil sie global sind. Wenn sie lokal wären dann wäre das nicht so. |
||
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Überschrieben passt hier nicht, sie sind in der Funktion nur "gesperrt".
Man sperrt globale Variablen in einer Funktion in dem man sie also Local deklariert, oder sie als Übergabe Variable für die Funktion angibt. |
||
![]() |
Bura.Tino |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber genau das ist es ja was ich nicht verstehe. Nach meinem Verständnis müsste es natürlich so sein wie Du sagst, aber das ist es ja eben nicht | ||
![]() ![]() |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] Global Va,Vb
Function Test(Va,Vb) Va=Va+1 Vb=Vb+2 End Function Va und Vb sind hier global, das heist, sie können in jeder Funktion benutzt werden, mit einer Ausnahme: Wenn sie für eine Funktion gesperrt wurden. Und das ist hier der Fall. Nämlich hier: Code: [AUSKLAPPEN] Function Test(Va,Vb)
Weil du dort Va und Vb als Übergabeparameter angegeben hast, steht Va und Vb in der Funktion nicht mehr für die globale Variable. Das selbe passiert auch wenn du das in der Funktion schreibst. Code: [AUSKLAPPEN] Local Va,Vb
Ist dazu da, damit man nicht ausversehen eine globalen Variable ändert, in einer Funktion, nur weil man den selben Variablennamen benutzt hat. |
||
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also einfach:
Code: [AUSKLAPPEN] Function Test()
und schon werden sie verändert.
Va=a+1 Vb=b+2 End Function Falls du einige der 4 globalen (Va, Vb, a, b) sperren willst: (bsp Va, Vb) Code: [AUSKLAPPEN] Function Test(Va,Vb)
so wie Kruemelator sagte.
Va=a+1 Vb=b+2 End Function Problem gelöst? |
||
![]() |
Bura.Tino |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Problem ist gelöst, wie ich vorhin schon schrieb. Mir ging es um das Verständnis, wieso das nicht geht. Jetzt ist mir das allerdings auch klar, aber den Grund dafür finde ich nicht wirklich verständlich. Wer programmiert schließt ja solche Konflikte von vorn herein gleich aus. | ||
![]() ![]() |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Augenscheinlich nicht, sonst hättest Du das Problem ja nicht gehabt ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das nennt sich Datenkapselung. Stell dir vor du machst eine tolle Funktion, die z.B. prüft ob eine übergebene Zahl eine Primzahl ist. Die ist so toll, dass du sie hier ins Codearchiv stellst. Aber nun könnte es ja zu Problemen kommen, wenn jemand deinen Code benutzt und globale Variablen hat, die genauso heißen wie die lokalen in deiner Funktion. Wäre ziemlich unvorhersehbar, was dann passiert. Und deswegen haben Funktionen ihren eigenen Variablenraum und man kann Variablen explizit als lokal deklarieren, egal ob es eine globale mit gleichem Namen gibt oder nicht. | ||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
Bura.Tino |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Bladerunner
Ich hatte das Problem ja, weil es diese Variablen überschreibt und nicht, weil ich etwas nicht ausgeschlossen habe. Ich habe es auf dem für mich logischsten Weg probiert, aber das hat ja nicht funktioniert. @D2006 In so einem Fall könnte es natürlich zu Konflikten kommen. Also das stimmt schon was Du sagst, aber wenn ich eine Funktion veröffentlichen würde, so würde ich die für die Funktion reservierten Variablen mit dazu schreiben und somit wüsste jeder welche er nicht in seinem Programm anderweitig nutzen kann. |
||
![]() ![]() |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, wenn Du die Funktion nur selbst in Deinem einen Programm verwendest, lässt sich so ein Umweg mit unvollständiger Kapselung schon mal coden....
Weitergeben, auch in Kombinationen mit "Warnhinweisen" ![]() Eine Funktion ist nur dann eine Funktion, wenn sie sich an diese eisernen Regeln hält. Stell Dir ein BlitzBasic vor, mit einer Liste von nur mal eben 1.000 "leider benutzten" Variablennamen. Keinen würde beim programmieren auf eine solche Sprache setzen. Wenn eine Funktion veröffentlicht wird, dann muss Sie gekapselt sein! Ohne wenn und aber, ohne Hinweise. Oft enthalten solche Funktionen sogar mehr als 50% Code, der nur dazu dient, Versuche, falsche Werte zu übergeben, zu verhindern. Bei Deiner Funktion heißt das: doch mit Types arbeiten. Es ist natürlich auch ein Unding, dass BB keine ByRef kennt. Hier besteht seitens der Entwickler leider auch kein Interesse mehr, dies zu verbessern. Für B3D gilt leider das gleiche. Es wirkt manchmal wie von vor 10 Jahren. BlitzMax hat da ganz andere Ansprüche. Und es bleibt zu hoffen, das B3D irgendwann als BlitzMax-Mod angeboten wird. |
||
- Zuletzt bearbeitet von Midimaster am Fr, Dez 18, 2009 1:55, insgesamt einmal bearbeitet
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
B3D-SDK? | ||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
JamaginBetreff: no types... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, ich arbeite sehr gerne mit Types und kann sie auch nicht mehr missen. Meine Programme bestehen eigentlich nur aus Funktionen welche vom Hauptprogramm aufgerufen werden. Und Inlinefunktionen, welche in Funktionen aufgerufen werden. In den Anfängen der Computer (C64, MSX, etc.) hab ich auch, ging ja damals nicht anders mit Goto und Gosubs gearbeitet. Aber ich finde Types schon klasse, zumal wenn man eine Listenfunktion schreiben muß, diese einfach dafür ganz gut geeignet sind. Natürlich das blättern in der Liste ist mit Types aufwendiger zu bewerkstelligen aber es ist machbar.
Also ich könnte mir ein Programmieren ohne Types nicht vorstellen aber belehrt mich eines Besseren wenn ich falsch liege. Trau dich und benutze Types, natürlich kannst du auch mit DIM arbeiten, aber ich denke, einmal mit Types, dann ist es undenkbar oder? lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: aber ich denke, einmal mit Types, dann ist es undenkbar oder?
Finde ich nicht. Types sind zwar schön dynamisch, eine Karte speicher ich aber doch lieber in einem Array. Das ist schneller und ich kann auf einzelne Felder besser zugreifen. |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
JamaginBetreff: wg Types |
![]() Antworten mit Zitat ![]() |
---|---|---|
... sagte ja eh, daß die Listenbearbeitung bzw. der Zugriff auf einzelne Typefelder etwas komplex ist aber machbar. Klar, Maps oder Karten in Array's ist auch nicht schlecht, aber das meiste mach ich eben mit Types. Wenn ich mich zurückerinnere mein erstes Shot-em-up game, ja da hab ich auch eine Scrollmap gemacht eben mit Array's. Aber sonst sämtliche Spielobjekte hab ich alle mit den Types gelöst!
Es bleibt eh jeden selbst überlassen! Ich hab ja nur meine Meinung zu diesem Thema kundgetan! Man sollte eben alles ausprobieren und für sich dann die beste Lösung heranziehen! lg. Jamagin ![]() |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
Bura.Tino |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich bin, auch wenn das vielleicht so rüberkam, kein Anfänger, sondern programmiere mittlerweile seit 22 Jahren. Types sind mir wohl vertraut und auch ich arbeite sehr gern damit. Allerdings kommt es natürlich darauf an was man machen will.
Wenn ich ein Tilebasiertes Spiel machen würde, dann würde ich für die Karte ein Array verwenden und für die Gegner und sowas natürlich mit Types arbeiten. Bei dem was ich gerade mache werde ich später auch auf Types umsteigen, aber am Anfang wäre das wie mit Kanonen auf Spatzen zu schießen. Deswegen wollte ich es eben noch nicht mit Types machen. |
||
![]() ![]() |
Gehe zu Seite Zurück 1, 2, 3 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group