Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Gibt es einen GOTO Befehl

Gibt es einen GOTO Befehl

Johnny
Johnny10.03.1113:33
Hallo zusammen!

Ich habe eine kurze Frage.
Gibt es bei AppleScript so etwas wie einen "GOTO"-Befehl?!
Also wenn Bedingung X erfüllt, dann springe zur Marke Y.

Falls nicht, kennt ihr einen guten Workaround?!

Vielen Dank schon im Voraus!
0

Kommentare

chill
chill10.03.1113:44
muss es ja geben, denn wie soll man sonst vernünftige scripte schreiben können?

hier kannst dich mal einlesen:

(schon toll, was google so alles zustande bringt. oder?)
„MBP M1 256/16 Monterey 12.1 . iPhone 11 128 GB, iOs 15.2“
0
Johnny
Johnny10.03.1113:57
prinzipiell erstmal Danke für eine Antwort!

Trotzdem würd ich dich bitten in Zukunft so absolut überflüssige Kommentare zu unterlassen. Entweder du willst helfen oder nicht.

Zu deinem Link- den kenne ich schon
Entweder bin ich blind oder es gibt dort nämlich nix to nem GOTO-Befehl oder ähnliches.

Auch habe ich schon google bemüht und zwar gestern Nacht über 2,5h. Daher bin ich so langsam ein wenig deprimiert.

Falls es diese Art von Befehl also wirklich geben sollte und du das wirklich WEISST und dann sogar noch Lust hast, dann poste doch wenigstens einen Link direkt dazu
Und nicht einfach auf ne Startseite

Danke trotzdem!
0
schleiftier10.03.1114:25
Welches Problem hast du denn bzw. willst du lösen mit dem Goto? Der Befehl wird eigentlich nicht mehr verwendet, außer von ein paar unverbesserlichen Basic-Programmierern
0
Chiplet
Chiplet10.03.1114:30
Hallo Johnny,

ohne jemals selbst AppleScript geschrieben zu haben, würde ich sagen, dass du dir in der oben verlinkten Beschreibung das Kapitel "Control Statements Reference" genauer ansehen solltest, dort findet man auch die üblichen Verdächtigen wie if then else und Schleifen:

Vielleicht hilfts dir ja weiter.
0
Chiplet
Chiplet10.03.1114:36
schleiftier
Kaum zu glauben, aber erst letztes Jahr wurde GOTO in PHP eingeführt! *sick*
0
Johnny
Johnny10.03.1114:43

Erstmal vielen Dank ihr zwei für eure Antwort!


Chiplet
Ja, da habe ich leider auch schon rein gesehen. Habe leider nix gefunden.
Ich wollte es aber nicht mit einer If...then...else Bedingung lösen.


schleiftier
Haha ähm... Könnte sein
Wobei ich jetzt nicht sooo der VBA Programmierer war/bin.

Zu meinem Problem- prinzipiell kann ich es auch mit ner If...then...else Bedingung lösen.
Hab ich im Moment ja auch gemacht weil ich keinen GOTO Befehl gefunden habe.

Was ich tun will ist einfach an einer bestimmten Stelle meines Scripts eine Variable auf ihren Wert hin prüfen.
Wenn die Bedingung erfüllt ist, dann soll das Script sofort beendet werden.
Und dieses "beenden des Scripts" hätte ich nun gerne damit erreicht, dass ich von der "Abfragestelle" zum Ende des Scripts springe.

Denn mein Code ist schon sehr lange und ich hatte/hab halt einfach keine Lust, alles was nach dieser Abfrage kommt in den else-Teil zu packen. Find ich irgendwie ein wenig unübersichtlich...

Haste einen anderen Vorschlag für mich?!

Wie gesagt, ich möchte im Prinzip nur, dass eine Variable geprüft wird und wenn die Bedingung erfüllt ist, dann sofort das Script beenden.
0
Klaus Major10.03.1114:47
Johnny
...Trotzdem würd ich dich bitten in Zukunft so absolut überflüssige Kommentare zu unterlassen. Entweder du willst helfen oder nicht.
Jaja, das ist unser Chill, wie er leibt und lebt, gewöhn Dich daran, er kann wohl nicht anders.

Ich frage mich allerdings immer, ob er im realen Leben auch so als respektlose, menschliche Katastrophe ohne Manieren herüberkommt wie hier im Forum...


Gruß

Klaus
0
chill
chill10.03.1114:50
klemmt hier was? ich hab doch zum developoer manual verlinkt!

leute gibts ... aber entwickler muss man wohl mit samthandschuhen anfassen, so empfindlich sind sie ... (die armen hascherles)
„MBP M1 256/16 Monterey 12.1 . iPhone 11 128 GB, iOs 15.2“
0
Johnny
Johnny10.03.1114:57
chill

Hast du meine Antwort gelesen?
Du hättest mir auch nen Link zur Bildzeitung schicken können, weil der genauso viel gebracht hätte!!
Ich hab doch gesagt das da nix stand!!

Wenn du WIRKLICH was GEWUSST hättest, dann...
Ach... is mir zu doof...
0
chill
chill10.03.1115:02
ja weiss ich in wie weit du in der materie drinsteckst, herrjeh nochmal?

das wurde ja erst später klar.

das dir mein link zu omatauglich ist kann ich ja nicht wissen, entschuldige bitte wenn ich dich mit einem offiziellen apple developer manual beleidigt habe. ja leck mich doch ...
„MBP M1 256/16 Monterey 12.1 . iPhone 11 128 GB, iOs 15.2“
0
Chiplet
Chiplet10.03.1115:03
Johnny
Ein GOTO-Befehl ist in der Regel total überflüssig und kommt deshalb in vielen Sprache nicht vor. In vielen Sprachen kann man ans Ende des Ausführungskontextes (z.B. Methode/Funktion/Script) bzw. dort hinaus springen mit Schlüsselwörtern wie return oder result. Wie gesagt, kann leider kein AppleScript, hier könnte mal jemand mit etwas mehr Kompetenz zum Thema auftauchen

Aber vielleicht konnte ich dich zumindest von der Überflüssigkeit von GOTO überzeugen, so dass du nicht weiter krampfhaft danach suchst.
0
Chiplet
Chiplet10.03.1115:04
ja leck mich doch ...
...im Ärmel!

Der chill geht jetzt mal ne Runde chillen, würd ich sagen!
0
Johnny
Johnny10.03.1115:15
Chiplet

Ohne Worte oder?!
Naja egal, wegen dem GOTO. Ich wär sofort von der Unnötigkeit überzeugt, wenn es eine Möglichkeit geben würde sofort das Script zu beenden, wenn die Bedingung X erfüllt ist.

Vielleicht schaut ja wirklich noch jemand vorbei, der mir da weiterhelfen kann
0
schleiftier10.03.1115:22
Johnny

Der Befehl zum Beenden einer Funktion ist einfach "return". Wenn du in keiner Unterfunktion bist, beendest du damit die Ausführung des Skripts.
0
lasergans10.03.1115:22
Ich kenn mich mit AS zwar nicht aus, aber versuch einfach mal ein return oder exit. Weniger als Nichts kann ja auch nicht passieren
Schau auch nochmal in der Documentation bei Control bzw Handler References.

EDIT: Too late
0
Johnny
Johnny10.03.1115:27
schleiftier

Das mit "return" kenn ich auch.
Was ich daran nur nicht so "ellegant" finde ist, dass das Programm (Skript wird als Programm gespeichert) ja nur angehalten wird. Also wenn ich das richtig verstanden habe...

Denn das Programm wird ja auch nicht beendet (Icon bleibt aktiv im Dock).


lasergans
Danke, exit gibts leider auch nicht
0
schleiftier10.03.1115:51
Johnny
Eigentlich sollte sich das Programm nach dem return komplett beenden. Hast du vielleicht beim Speichern den Haken bei "Nicht automatisch beenden" gesetzt?
0
ts
ts10.03.1115:52
schleiftier
Welches Problem hast du denn bzw. willst du lösen mit dem Goto? Der Befehl wird eigentlich nicht mehr verwendet, außer von ein paar unverbesserlichen Basic-Programmierern
Eventuell auch in Assembler. Man sollte es aber, wenn möglich vermeiden.

Johnny: Geht "tell me to quit" oder "quit"?
0
Johnny
Johnny10.03.1116:08
schleiftier

Och menno!!!!!
Kann doch wohl nicht sein!! Wie is denn der doofe Haken da rein gekommen!!

Ich danke dir!!


ts

Danke auch dir für deine Antwort!
Leider funktioniert es nicht. Habe es so gemacht (als Test):
delay 0.5
beep
delay 0.5
beep

tell me to quit

delay 0.5
beep
delay 0.5
beep
Wurde dann als Programm gespeichert und ausgeführt.
Ergebnis = es kommen 4 Töne

Hab ich was falsch gemacht?!
0
lasergans10.03.1117:26
Johnny:
exit gibts, aber hilft dir wahrscheinlich nicht direkt weiter. [quote =Documentation]exit
Terminates a repeat loop and resumes execution with the statement that follows the repeat statement.

You can only use an exit statement inside a repeat statement. Though most commonly used with the repeat (forever) form, you can also use an exit statement with other types of repeat statement.
[/quote]


Zu deinem Testscript:
Bei mir funktioniert es: 2 Töne und dann
error "Vom Benutzer abgebrochen." number -128
0
Johnny
Johnny10.03.1117:42
lasergans

Ja sorry, hab mich doof ausgedrückt!
Den "exit" Befehl gibt es nur in Verbindung mit "repeat" um ne Schleife zu verlassen...

Jetzt aber noch mal zu dem Code-Schnippsel:
delay 0.5
beep
delay 0.5
beep

tell me to quit

delay 0.5
beep
delay 0.5
beep
Du hast den exakt so eingegeben wie hier gepostet?!
Und dann als Programm gespeichert oder als Script im Editor ausgeführt?!

Denn der Fehler -128 bedeutet "Vom Benutzer abgebrochen" und wär hier ja kein Fehler, sondern gewollt
Die Meldung könnte man dann ja auch wahrscheinlich einfach mit dem Code:
ignoring application responses
...
...
end ignoring
unterdrücken...
0
_mäuschen
_mäuschen10.03.1118:40
Johnny



Wie gesagt, ich möchte im Prinzip nur, dass eine Variable geprüft wird und wenn die Bedingung erfüllt ist, dann sofort das Script beenden.


set a to 3
if a is 3 then
    try
        --force an error
        set x to x / 0
    on error
        return
    end try
end if

display dialog "blupp"

0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.