goto alternative

  • hey, ich habe zwar mit autoit erst ab V3 angefangen, wo :goto schon entfernt wurde, aber dennoch kenne ich es von batch-programmierung.
    ehrlich gesagt vermisse ich diese funktion.

    in der hilfe steht, dass man "schleifen" oä nehmen soll, aber irgendwie bleibt mir der sinn schleierhaft.

    ich habe jetzt ein script, um das komplett eine if-abfrage liegt. das gilt aber eigentlich nur für einen teil im script, das ende ist bei if then sowie else gleicht.
    diesen teil habe ich aber jetzt 2 mal in meinem script, was nicht unbedingt der übersichtlichkeit dient.
    schön wäre es doch wenn man es machen kann...

    if ... then
    mache dies und das
    dann :goto ende
    else
    mache was anderes
    dann :goto ende
    endif
    :ende

    wieso nehmen die einfach goto raus, es tut doch keinem weh *heul*
    aber was soll jetzt die alternative dafür sein, programmcode nicht doppelt zu haben. mit den schleifen komme ich da ja nicht weit, selbst wenn mir das bsp in der hilfe plausibel ist.
    einzige möglichkeit wäre dann eine funktion, oder? aber ist es da nicht einfacher, mit goto zu arbeiten?

    • Offizieller Beitrag

    Hi!

    Code mit Goto ist in aller Regel schwer zu lesen und nicht logisch aufgebaut. Er widerspricht grundlegend einer sinnvollen Art zu programmieren und ist daher zu Recht entfernt worden.
    In deinem Fall scheint eine Funktion (Func ... EndFunc) die saubere Lösung zu sein.
    Glaub mir, die AutoIt-Entwickler wissen, was gut ist - wenn du dich mal in Funktionen und Schleifen eingearbeitet hast, wirst du sie nicht mehr hergeben wollen :).

    peethebee

    • Offizieller Beitrag

    Hallo!

    Durch die Verwendung von goto und gosub wie man es aus allten BASIC-Dialekten kennt wird ein Programm sehr unübersichtlich (Spaghetticode). In höheren Programmiersprachen wird man nach Befehlen wie goto und gosub vergebens suchen weil man dort mit Schleifen, Funktionen und Verzweigungen effektivere und übersichtlichere Programme schreiben kann.

    In dem von dir dargestellten Code ist ein goto übrigens völlig überflüssig weil das genau das gleiche ist wie das:

    [autoit]


    if ... then
    mache dies und das
    else
    mache was anderes
    endif

    [/autoit]
  • hiho,

    ja klar kann ich das ganze auf it then ... else ... endif beruhen lassen. aber das code 2 mal drin ist, nervt micht.

    ok, das code mit goto nicht unbedingt sonderlich strukturiert ist, versteh ich noch, aber was is da anders bei funktionen?
    die sollen der übersicht halber, am ende stehen ... das gleiche kann ich mit goto ja auch machen, um wenigstens bissel struktur reinzukriegen *g*

    naja, nichts desto trotz werde ich drauf verzichten müssen und mir nen function basteln *g*

    schonmal danke für die hilfe/tips =)

  • Moin sc4ry,

    Versuch mal folgendes mit Goto ;)

    Spoiler anzeigen
    [autoit]

    if $var == 1 then
    Ausgabe( "Ist eins!" )
    Else
    Ausgabe( "Ist nicht eins!" )
    EndIf
    Ausgabe( "Programm beendet..." )

    [/autoit] [autoit][/autoit] [autoit]

    Func Ausgabe( $Text )
    MsgBox( "Meldung : " & $Text )
    EndFunc

    [/autoit]

    Mit Goto kannst du nicht wieder 'zurückspringen' (okay einmal ;)). Und Gosub ist eigentlich auch nur eine Funktion ohne Parameter...