Seite 1 von 1

Goto

Verfasst: 16.01.2015 13:43
von stevie1401
Ja, ich weiss, Gotos sind nicht wirklich beliebt.
Dennoch habe ich einen alten Freebasic-Code, den ich nun in PB umschreiben möchte, der so einige Gotos in sich hat.

Nur einmal ein Beispiel-Code:

Code: Alles auswählen

Procedure Irgendwas()

If Bedingung=1
   goto IrgendwasRaus  ;soll lediglich verhindern, dass unterer Code ausgeführt wird
EndIf


for i=1 to 100
  a+i
next i

IrgendwasRaus:  ;label oder Sprungmarke  (innerhalb der Procedure!!)

EndProcedure

Ist dieses Goto ok, oder kann es da Probleme geben?
Ich möchte hier keine Diskussion entfachen wie sinnig oder unsinnig Gotos sind, sondern ich möchte nur wissen, ob dieser Code funktioniert, oder ob es irgendwann mal crasht, wenn die Procedure z.B. 100x ausgeführt wird.

Vielen Dank schon mal im Voraus :-)

Re: Goto

Verfasst: 16.01.2015 13:53
von Kiffi
Du kannst die Prozedur auch verlassen, wenn die Bedingung zutrifft:

Code: Alles auswählen

Procedure Irgendwas()

If Bedingung=1
   ProcedureReturn
EndIf

for i=1 to 100
  a+i
next i

EndProcedure
Grüße ... Peter

Re: Goto

Verfasst: 16.01.2015 13:56
von NicTheQuick
Zur ursprünglichen Frage: Es macht keine Probleme.

Re: Goto

Verfasst: 16.01.2015 16:32
von Chimorin

Code: Alles auswählen

Procedure Irgendwas()

If not Bedingung=1
   for i=1 to 100
  a+i
next i
EndIf
EndProcedure
Warum nicht einfach auf das Gegenteil überprüfen? Man braucht Goto nicht (Gibt hier glaube ich unzählige Debatten darüber).
Du solltest in deinem Programm darüber nachdenken, was dein Goto macht und es dann ersetzen. Solche Gedankenspielereien sind mMn das Programmieren an sich; Der Rest ist nur die Fassade.

Re: Goto

Verfasst: 16.01.2015 16:52
von NicTheQuick
Interessante Diskussionen zum Thema Goto gibt es übrigens auch hier: Goto sinnvoll nutzen.

Re: Goto

Verfasst: 17.01.2015 03:43
von mk-soft
Hab mir das irgendwann so angewöhnt. War mal ein Tipp aus dem Forum...

Code: Alles auswählen

Procedure Irgendwas()
  
  Repeat
    If Bedingung=1
       Break  ;soll lediglich verhindern, dass unterer Code ausgeführt wird
    EndIf
    
    For i=1 To 100
      a+i
    Next i
    
  Until #True
  
EndProcedure
:wink:

Verfasst: 17.01.2015 12:58
von CodeCommander
~ DELETE ~

Re: Goto

Verfasst: 17.01.2015 13:13
von STARGÅTE
Nein war/ist es nicht.

Solche Fake-Schleifen sind durchaus ein sparsammes Werkzeug um durch den Code zu navigieren (ohne Goto), unabhängig von Proceduren.

Verfasst: 17.01.2015 13:22
von CodeCommander
~ DELETE ~

Re: Goto

Verfasst: 17.01.2015 15:17
von Tommy
+1 Ich nutze auch lieber PR
Dafür is es auch gedacht