Warum Goto und Gosub nur mit Vorsicht gebrauchen.
Weil Goto und Gosub so viele Nachteile haben, hat man die Funktionen und Proceduren entwickelt.
Die Prozeduren sind also eine Weiterentwicklung.
Wer sich Programmiertechnisch weiter entwickeln will, nutzt Prozeduren.
[Edit]
Und bereitet sich dadurch, für OOP vor.
[/Edit]
Die Prozeduren sind also eine Weiterentwicklung.
Wer sich Programmiertechnisch weiter entwickeln will, nutzt Prozeduren.
[Edit]
Und bereitet sich dadurch, für OOP vor.
[/Edit]
Zuletzt geändert von PAMKKKKK am 23.12.2005 00:19, insgesamt 2-mal geändert.
Wir Schreiben ein PureBasic Buch.
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
Auch du kannst mitmachen!
http://www.purearea.net/pb/english/pure ... :Main_Page
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Darf man nicht ganz so verbissen sehen, weil der PBCompiler macht ja doch wieder "Goto = JMP" draus
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Was der compiler macht ist egal.
Letztlich geht's ja nicht drum maschinennah zu coden oder so
wie der Compiler das macht sondern darum, einigermaßen
verständlichen Source zu schreiben, d.h. für den Menschen (oder
wenn schon nicht für Menschen so doch wenigsten für Program-
mierer) lesbar und verstehbar zu gestalten.
Ich nutze selber auch Gotos wenn's mich überkommt, nach dem
Motto : geht und gut. Gerade vorgestern habe ich erst eins be-
nutzt.
Allerdings möchte ich den Code in eigentlich in drei Jahren
nicht nochmal überarbeiten müssen. Da haut so ein Goto
dann ganz schön Kerben in die Hirnhaut.
Oder anders gesagt : Gotos sind persönliche Jobsicherungs-
systeme
Letztlich geht's ja nicht drum maschinennah zu coden oder so
wie der Compiler das macht sondern darum, einigermaßen
verständlichen Source zu schreiben, d.h. für den Menschen (oder
wenn schon nicht für Menschen so doch wenigsten für Program-
mierer) lesbar und verstehbar zu gestalten.
Ich nutze selber auch Gotos wenn's mich überkommt, nach dem
Motto : geht und gut. Gerade vorgestern habe ich erst eins be-
nutzt.
Allerdings möchte ich den Code in eigentlich in drei Jahren
nicht nochmal überarbeiten müssen. Da haut so ein Goto
dann ganz schön Kerben in die Hirnhaut.
Oder anders gesagt : Gotos sind persönliche Jobsicherungs-
systeme
pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
-
- Beiträge: 557
- Registriert: 29.11.2005 15:05
"Letztlich geht's ja nicht drum maschinennah zu coden oder so
wie der Compiler das macht sondern darum, einigermaßen
verständlichen Source zu schreiben"
das ist mir nicht egal. ich möchte knappen und schnellen asm-code.
den erzeuge ich nur mit goto und gosub und nicht mit procedure und funktion. die dauern fast das dreifache an zeit, und diese vergeudung ist schon unangenehm.
castle
wie der Compiler das macht sondern darum, einigermaßen
verständlichen Source zu schreiben"
das ist mir nicht egal. ich möchte knappen und schnellen asm-code.
den erzeuge ich nur mit goto und gosub und nicht mit procedure und funktion. die dauern fast das dreifache an zeit, und diese vergeudung ist schon unangenehm.
castle
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
seit 4.0 gibt es Macros in PB.
Macros ist allerdings nur ne "Abkürzung".
zur kompilezeit wird der komplette Inhalt eingefügt.
wenn du irgendwas komplexes statt in eine Proc in ein Macro schreibst,
wird dein Prog vielleicht schneller, aber auch schnell mal 10x so groß.
Macros ist allerdings nur ne "Abkürzung".
zur kompilezeit wird der komplette Inhalt eingefügt.
wenn du irgendwas komplexes statt in eine Proc in ein Macro schreibst,
wird dein Prog vielleicht schneller, aber auch schnell mal 10x so groß.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 11
- Registriert: 16.09.2007 12:39
Sehr sehr schön erklärt.
Ich muss nur leider ein Gegenargument bringen
Aber wenn du zu Anfangszeiten mit einem C64 rum gewurschtelt hast dann Jahre nichts mehr auf dem Gebiet getan hast
dann bekommst du mit dem ganzen Prozeduren schlechter zurecht wie mit goto und gosub.
Tja mit mitte 30 will sich das Gehirn leider nicht mehr umstellen.
Ich muss nur leider ein Gegenargument bringen
Aber wenn du zu Anfangszeiten mit einem C64 rum gewurschtelt hast dann Jahre nichts mehr auf dem Gebiet getan hast
dann bekommst du mit dem ganzen Prozeduren schlechter zurecht wie mit goto und gosub.
Tja mit mitte 30 will sich das Gehirn leider nicht mehr umstellen.
Verstehe nicht wo das Problem liegt.seidenraupe hat geschrieben:Sehr sehr schön erklärt.
Ich muss nur leider ein Gegenargument bringen
Aber wenn du zu Anfangszeiten mit einem C64 rum gewurschtelt hast dann Jahre nichts mehr auf dem Gebiet getan hast
dann bekommst du mit dem ganzen Prozeduren schlechter zurecht wie mit goto und gosub.
Tja mit mitte 30 will sich das Gehirn leider nicht mehr um
stellen.
Goto=Jmp, fällt einfach weg.
Gosub und Return = Parameter puschen und Call und Ret = Prozedur
Da gibts nix zu optimieren. Esseiden der PB-Compiler baut wirklich groben Unfug zusammen, was ich aber nicht glaube.
Ein Prozeduraufruf sollte, wenn man keine Variablen übergibt exakt gleich schnell wie ein Gosub sein, da eigentlich der gleiche Assembler-Code erzeugt werden müsste.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke!
Re:
Hallo,seidenraupe hat geschrieben:Sehr sehr schön erklärt.
Ich muss nur leider ein Gegenargument bringen
Aber wenn du zu Anfangszeiten mit einem C64 rum gewurschtelt hast dann Jahre nichts mehr auf dem Gebiet getan hast
dann bekommst du mit dem ganzen Prozeduren schlechter zurecht wie mit goto und gosub.
Tja mit mitte 30 will sich das Gehirn leider nicht mehr umstellen.
bei mir sind es ~30 Jahre Pc Abstinenze,und ich bin 50+
Was ich nicht so ganz verstehe ist,warum es überhaupt nötig ist,
Name-Spaces zu haben? bzw eine Prozedur daran zu hindern,
Variabeln zu ändern??
Dafür schreibe ich doch die Sub/Prozedur,oder nicht?
Ich brauche bei Sub n Variabele(Global)
Ich brauche bei Proc n*2 Variabele (n für Main;n für proc) plus Eine,
in der das Ergebniss übergeben wird.
Mit einer Variabelen-Liste hatte ich nur selten probleme
Goto ...,wenn dis Programm entweder/oder weiter geht,
ist goto doch das einfachste
Dies ist meine persönliche Meinung,die nicht geteilt werden muss
Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Warum Goto und Gosub nur mit Vorsicht gebrauchen.
@Olafmagne
Du hast aber noch nie einen größeren Code geschrieben, als vielleicht ein paar 100 Zeilen
"Richtige" Programme sind aber meist wesentlich größer, 10.000 oder mehrere 100.000 Zeilen sind da keine Seltenheit. Wenn da wild umhergejumpt wird, also von einer Procedure in eine andere oder in den Mainscope, dann gibt es natürlich Stackoverflow. Genauso auch z.B. globale Variablen. Wer will den da noch Wissen, welchen Inhalt diese haben sollte oder ob diese nicht bereits mehrmals verwendet wurde oder ob sich nicht was ganz anderes auch ändert, wenn ich die Variable ändere.
Es ist also schon sinnvoll, das Programm in viele kleine, gekapselte Prozeduren zu packen. Der Code ist besser wartbar, testbar und auch verständlicher.
Deine Ansicht mag ja für Dich in Ordnung zu sein, solange Du alleine Programmierst (nicht in Teams) und nicht allzu lange Programme schreibst. Ich persönlich mag solche Codes nicht und ignoriere sie auch meist.
Gruß
Thomas
Du hast aber noch nie einen größeren Code geschrieben, als vielleicht ein paar 100 Zeilen
"Richtige" Programme sind aber meist wesentlich größer, 10.000 oder mehrere 100.000 Zeilen sind da keine Seltenheit. Wenn da wild umhergejumpt wird, also von einer Procedure in eine andere oder in den Mainscope, dann gibt es natürlich Stackoverflow. Genauso auch z.B. globale Variablen. Wer will den da noch Wissen, welchen Inhalt diese haben sollte oder ob diese nicht bereits mehrmals verwendet wurde oder ob sich nicht was ganz anderes auch ändert, wenn ich die Variable ändere.
Es ist also schon sinnvoll, das Programm in viele kleine, gekapselte Prozeduren zu packen. Der Code ist besser wartbar, testbar und auch verständlicher.
Deine Ansicht mag ja für Dich in Ordnung zu sein, solange Du alleine Programmierst (nicht in Teams) und nicht allzu lange Programme schreibst. Ich persönlich mag solche Codes nicht und ignoriere sie auch meist.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.