Warum Goto und Gosub nur mit Vorsicht gebrauchen.

Hier kannst du häufig gestellte Fragen/Antworten und Tutorials lesen und schreiben.
Benutzeravatar
PAMKKKKK
Beiträge: 321
Registriert: 21.04.2005 22:08
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von PAMKKKKK »

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]
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
Benutzeravatar
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

Beitrag von ts-soft »

Darf man nicht ganz so verbissen sehen, weil der PBCompiler macht ja doch wieder "Goto = JMP" draus :mrgreen:
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.
Bild
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

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
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag von super_castle »

"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
Benutzeravatar
obbba
Beiträge: 53
Registriert: 06.02.2006 17:33

Beitrag von obbba »

Makros gibts auch noch. Die sind eigentlich das schnellste.
Werden die häufig benutzt? (Jetzt nicht bei PB - da müsste man IncludeFile nehmen.)
PureBasic v3.94 (Windows - x86) (Demo)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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ß.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
seidenraupe
Beiträge: 11
Registriert: 16.09.2007 12:39

Beitrag von seidenraupe »

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. :(
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

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. :(
Verstehe nicht wo das Problem liegt.
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! Bild
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re:

Beitrag von Olafmagne »

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. :(
Hallo,
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
Benutzeravatar
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.

Beitrag von ts-soft »

@Olafmagne

Du hast aber noch nie einen größeren Code geschrieben, als vielleicht ein paar 100 Zeilen :wink:
"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.
Bild
Antworten