Goto

Anfängerfragen zum Programmieren mit PureBasic.
stevie1401
Beiträge: 700
Registriert: 19.10.2014 15:51
Kontaktdaten:

Goto

Beitrag 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 :-)
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Goto

Beitrag 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
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Goto

Beitrag von NicTheQuick »

Zur ursprünglichen Frage: Es macht keine Probleme.
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Goto

Beitrag 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.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Goto

Beitrag von NicTheQuick »

Interessante Diskussionen zum Thema Goto gibt es übrigens auch hier: Goto sinnvoll nutzen.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Goto

Beitrag 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:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:57, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Goto

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

~ DELETE ~
Zuletzt geändert von CodeCommander am 18.01.2015 14:58, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
Tommy
Spassvogel
Beiträge: 319
Registriert: 17.10.2013 14:36

Re: Goto

Beitrag von Tommy »

+1 Ich nutze auch lieber PR
Dafür is es auch gedacht
Zuletzt geändert von Tommy am 27.01.2015 10:29, insgesamt 2-mal geändert.
PB 5.41 x64
Antworten