Unterschied zwischen Goto und GoSub Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Nussbeisser
Posts: 113
Joined: 17 Jul 2019, 08:49

Unterschied zwischen Goto und GoSub

Post by Nussbeisser » 29 Jul 2020, 16:30

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

gregster
Posts: 8999
Joined: 30 Sep 2013, 06:48

Re: Unterschied zwischen Goto und GoSub  Topic is solved

Post by gregster » 29 Jul 2020, 17:34

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.

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!

Nussbeisser
Posts: 113
Joined: 17 Jul 2019, 08:49

Re: Unterschied zwischen Goto und GoSub

Post by Nussbeisser » 30 Jul 2020, 16:39

Danke für die super Erklärung!

Post Reply

Return to “Ich brauche Hilfe”