Hallo,
kann mir jemand erklären, was der Unterschied zwischen Goto und GoSub ist?
Manchmal funktioniert mein Code mit Goto nicht aber GoSub, ohne Probleme.
Die Doku geht auf die Unterschiede gar nicht ein, die Beschreibung ist fast identisch.
Würde mich freuen, wenn man mich aufklären würde, damit ich nicht ständig rum probieren muss.
schöne Grüße
Unterschied zwischen Goto und GoSub Topic is solved
Moderator: jNizM
Re: Unterschied zwischen Goto und GoSub Topic is solved
Sie sind ziemlich ähnlich, mit einem wichtigem Hauptunterschied. Man kann dazu fragen: Was passiert, wenn das nächste Return erreicht wird?
Wenn du mit gosub irgendwo hinspringst (zu einem Label), dann erfolgt beim nächsten Return, das erreicht wird, ein Rücksprung zum aufrufenden gosub und der unmittelbar darauf folgende Code wird ausgeführt.
Machst du dagegen einen goto-Sprung, dann erfolgt kein automatischer Rücksprung und die Codeausführung endet beim Return, so wie am Ende der auto-execution section am Beginn eines Skripts (in der Praxis führt das häufig dazu, dass Leute wieder mit einem goto aus der Subroutine rausspringen - und das führt dann wiederum (häufig) zum berühmt-berüchtigten Spaghetti-Code, insbesondere wenn es mehrere solcher Sprünge gibt).
Goto kann in der Regel vermieden werden durch andere Konstruktionen (gosub, Funktionen, Schleifen aller Art etc.), und sollte möglichst vermieden werden, weil es eher die Unübersichtlichkeit und schlechte Gewohnheiten fördert (jedenfalls mehr als gosub). Nichtsdestotrotz kann man es natürlich (bewusst) einsetzen.
Wenn du mit gosub irgendwo hinspringst (zu einem Label), dann erfolgt beim nächsten Return, das erreicht wird, ein Rücksprung zum aufrufenden gosub und der unmittelbar darauf folgende Code wird ausgeführt.
Machst du dagegen einen goto-Sprung, dann erfolgt kein automatischer Rücksprung und die Codeausführung endet beim Return, so wie am Ende der auto-execution section am Beginn eines Skripts (in der Praxis führt das häufig dazu, dass Leute wieder mit einem goto aus der Subroutine rausspringen - und das führt dann wiederum (häufig) zum berühmt-berüchtigten Spaghetti-Code, insbesondere wenn es mehrere solcher Sprünge gibt).
Goto kann in der Regel vermieden werden durch andere Konstruktionen (gosub, Funktionen, Schleifen aller Art etc.), und sollte möglichst vermieden werden, weil es eher die Unübersichtlichkeit und schlechte Gewohnheiten fördert (jedenfalls mehr als gosub). Nichtsdestotrotz kann man es natürlich (bewusst) einsetzen.
Code: Select all
gosub einLabel ; ein Sprung
msgbox huch, hier gehts weiter ; <-- nach 'return' der Subroutine gehts hier weiter
goto einLabel ; nochn Sprung
msgbox Oh, das kleppt nicht - die Codeausführung steckt fest in der Subroutine. ; wird nicht mehr ausgeführt
return
einLabel:
msgbox 'einLabel' wurde angesprungen.
; Codenudel-Freunde springen hier bisweilen irgendwo anders hin, mit dem nächsten goto... :-]
return ; bei gosub erfolgt hier ein Rücksprung, bei goto nicht!
-
- Posts: 113
- Joined: 17 Jul 2019, 08:49
Re: Unterschied zwischen Goto und GoSub
Danke für die super Erklärung!