c#(break:) in autoit?

  • Hi,

    hab irgendwie nirgends in der Hilfe gefunden ob bzw wie der Befehl heißt um ein Switch frühzeitig zu beenden.

    [autoit]

    Switch $Zahl
    Case 1
    MsgBox(0,"","Zahl = 1")
    Case 2
    MsgBox(0,"","Zahl = 2")
    break:
    MsgBox(0,"","das wird nichtmehr angezeigt")
    EndSwitch

    [/autoit]

    Danke für die Hilfe i3illig

  • Wenn du das in einer While-Schleife hast kannst du dir mit ExitLoop weiterhelfen.
    Falls es nicht in einer Schleife steht dann könnte dir das aus der Hilfe weiterhelfen :

    Wenn der Ausdruck wahr ist, werden die Befehle bis zum nächsten
    Case oder EndSelect ausgeführt. Wenn mehr als ein Case-Ausdruck wahr ergibt,
    wird nur der erste ausgeführt.

  • falls das case jetzt in einer while schleife wäre und ich mit continue case arbeiten würde, würde das dann klappen?

  • ja das ist mir bewusst, falls ich jetzt aber in der while schleife mit continue case arbeiten würde, kann es dann passieren dass ich einen stack overflow oder ähnliches, durch diese methode, verursache?

  • Hallo,
    bei dieser Frage fehlt mir ehrlich gesagt der tiefere Sinn...
    a) genanntes Scriptbeispiel: völlig unsinnig, denn da der letzte Ausdruck sowieso nie erreicht werden soll, lässt man ihn gleich ganz weg.
    b) Abfangen mitten in der Case-Sequenz: wenn mitten in der Sequenz der Rest übersprungen werden soll, dann ist das Script so wie a) s.o.
    Ergo ist die Abfrage an sich unsinnig. Was allerdings Sinn macht ist ein Case else, wenn das nicht hilft, dann sollte man sich grundlegend fragen ob Switch die richtige Funktion ist um die Bedingungen abzufragen. Da gibts ja glücklicherweise noch mehr :D

  • Wozu brauch man denn auch so etwas?
    Es macht doch nur Sinn, wenn man z.b: eine Bedingung daran knüpft.

    Wäre dies eine Lösung?

    [autoit]


    Switch $Zahl
    Case 1
    MsgBox(0,"","Zahl = 1")
    Case 2
    MsgBox(0,"","Zahl = 2")
    ;break:
    if 0 then
    MsgBox(0,"","das wird nichtmehr angezeigt")
    endif
    EndSwitch

    [/autoit]
  • Zitat

    kann es dann passieren dass ich einen stack overflow oder ähnliches, durch diese methode, verursache?

    nein, genau dazu wurde diese Konstruktion gemacht.

  • Ja, es ist die richtige methode. In höheren Programmiersprachen gibt es halt einen break befehl, also ist es wohl doch nicht so unsinnig wie du glaubst :).
    Das obere Beispiel war nur zum näheren erleutern was ich erreichen will und hat auch wirklich keinen tieferen sinn! ;)

    edit: was ich jetzt eigentlich nur wissen muss ist ob dieser continue case irgendwelche nachteile hat wenn ich ihn im folgenden muster laufen lasse:

    [autoit]


    While 1
    Switch $var
    Case 1
    ;blub
    Case 2
    ;blub
    ContinueCase
    ;blub 2
    EndSwitch
    WEnd

    [/autoit]
  • Hi,

    wieso machst Du nicht einfach folgendes:

    [autoit]

    DeineFunktionBzwMethode()

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

    Func DeineFunktionBzwMethode()
    Switch $Zahl
    Case 1
    MsgBox(0, "", "Zahl = 1")
    Case 2
    MsgBox(0, "", "Zahl = 2")
    Return 0 ;Gibt einfach eine 0 wieder und bricht die Funktion/Methode ab.
    MsgBox(0, "", "das wird nichtmehr angezeigt")
    EndSwitch
    EndFunc ;==>DeineFunktionBzwMethode

    [/autoit]
  • ahhhh, langsam wirds hell.....

    Zitat

    also ist es wohl doch nicht so unsinnig wie du glaubst

    Dein Script im Startpost hat das :BREAK an einer missverständlichen Position! Nicht umsonst sollte man die Einrückungen nutzen :D

    [autoit]

    While 1
    Switch $var
    Case 1
    ;blub
    Case 2
    ;blub
    ContinueCase ;soooooo ist das fein und verständlich dargestellt ;)
    ;blub 2 das ist wiederum völlig unverständlich.....
    case 3
    ;blup
    EndSwitch
    WEnd

    [/autoit]

    und wieder verstehe ich das blub2 nach dem continuecase nicht^^

    /*EDIT*/

    [autoit]

    While 1
    Switch $var
    Case 1
    ;blub
    Case 2
    ;blub
    If $x=True then ContinueCase ;soooooo ist das fein und verständlich dargestellt ;)
    ;blub 2 macht in dem Kontext dann auch wieder sinn ;)
    case 3
    ;blup
    EndSwitch
    WEnd

    [/autoit]
  • Also bei mir wird nichts hell :D
    Sobald eine Bedingung in Switch ... Endswitch erfüllt wird, wird die Schleife verlassen.
    Ausnahme: ContinueCase (wofür mir bis heute noch keine sinnvolle Anwedungsmöglichkeit eingefallen ist)

  • Wenn ich das richtig verstanden habe, ist ContinueCase aber das Gegenteil von break

    Also

    [autoit]

    case 1
    MsgBox(0, "Blubb", "1")
    ContinueCase
    case 2
    MsgBox(0, "Blubb", "2")
    case 3
    MsgBox(0, "Blubb", "3")

    [/autoit]

    entspricht

    Code
    case 1:
    	MessageBox(NULL, "1", "Blubb", MB_OK);
    case 2:
    	MessageBox(NULL, "2", "Blubb", MB_OK);
    	break;
    case 3:
    	MessageBox(NULL, "3", "Blubb", MB_OK);
    	break;