Sparen Sie Zeit und Mühe mit AppleScript Repeat Loops
() translation by (you can also view the original English article)
In unserer fortlaufenden Reihe von AppleScript-Artikeln lernen wir heute die Leistungsfähigkeit von Wiederholungsschleifen kennen, mit denen Sie durch die Automatisierung sich wiederholender Aufgaben und Befehlsgruppen eine Menge Aufwand sparen können. Nachdem Sie gelernt haben, Wiederholungen zu verwenden, können Sie den Arbeitsaufwand für die Automatisierung von Aufgaben erheblich reduzieren, was zu einer schnelleren, einfacheren Codierung und höheren Produktivität führt.
Weitere großartige AppleScript-Tutorials
Bevor wir uns mit Wiederholungsschleifen befassen, lesen Sie unbedingt einige unserer vorherigen AppleScript-Tutorials.
- Der ultimative Anfängerleitfaden für AppleScript
- Erweiterte AppleScript-Techniken
- Wenn und wenn sonst: AppleScript-Bedingungsanweisungen
- Start Ihrer Lieblings-Apps in den Gruppen mit AppleScript
Wiederholen Sie die klingende Freude
Wenn Sie es beim ersten Mal richtig gemacht haben, ist es nicht einmal genug?
Wenn Sie schon einmal programmiert oder Skripte erstellt haben, wissen Sie, dass Schleifen für die Erreichung nahezu aller wichtigen Aufgaben von entscheidender Bedeutung sind. Wenn Sie mit der Idee des Programmierens noch nicht vertraut sind, fragen Sie sich möglicherweise, warum zum Teufel Sie jemals etwas wiederholen möchten. Wenn Sie es beim ersten Mal richtig gemacht haben, ist es nicht einmal genug?
Die Antwort liegt natürlich darin, dass wir häufig mit riesigen Datenmengen arbeiten. Wenn Sie fünfhundert Bilder in einem Ordner haben und mit jedem von ihnen etwas tun möchten, können Sie entweder fünfhundert Mal denselben Befehl eingeben und ihn jedes Mal auf eine andere Datei ausrichten oder eine Wiederholungsschleife verwenden und Ihre speichern geistige Gesundheit.
Die Struktur einer Wiederholungsschleife
Wenn Sie meinen vorherigen Artikel über bedingte Anweisungen lesen, sollte die Struktur einer Wiederholungsschleife bekannt sein. Wie bei vielen anderen AppleScript-Konstrukten bildet die Wiederholungsschleife einen Codeblock mit Start und Ende.
[applescript] repeat 3 times --commands to repeat end repeat [/applescript]
Wie Sie sehen können, beginnt die erste Zeile mit "repeat" und umreißt dann die Bedingungen der Wiederholung. Im mittleren Bereich werden alle zu wiederholenden Befehle platziert, und in der letzten Zeile wird der Compiler darüber informiert, dass hier die Schleife endet.



Das obige Codebeispiel ist dank der hohen Lesbarkeit von AppleScript recht einfach. Alles innerhalb dieses Wiederholungsblocks wird dreimal wiederholt, dann wird das Skript fortgesetzt (es sei denn, die Wiederholung enthält eine Beendigungsaktion).
Eine Sache, die Sie beachten sollten, ist, dass Ihr Code so geschrieben werden muss, dass das Wiederholen tatsächlich etwas Nützliches bewirkt. Es ist häufig der Fall, dass ein bestimmter Codeabschnitt gleich ist, unabhängig davon, ob Sie ihn einmal oder tausendmal ausführen. Es liegt an Ihnen, es so zu formen, dass die Wiederholung Fortschritte macht. Wir werden sehen, wie das geht, wenn wir uns über die verschiedenen Arten von Wiederholungen informieren, die verfügbar sind.
Arten von Wiederholungsschleifen
In einem früheren Artikel haben wir darüber gesprochen, wie Sie Ihre if-Anweisungen durch verschiedene Kombinationen von if, else und else if erheblich variieren können. Wiederholungsschleifen können ein noch höheres Maß an Variation erzielen, da es in AppleScript tatsächlich viele verschiedene Arten von Wiederholungsschleifen gibt. Lassen Sie uns jeden einzelnen durchgehen und wie es funktioniert.
Eine Endlosschleife
Die erste Art der Wiederholung ist eine Endlosschleife. Dies tritt auf, wenn wir einfach einen Wiederholungsblock ohne Modifikatoren jeglicher Art verwenden.
[applescript] set x to "monotony" repeat display dialog x end repeat [/applescript]
Wenn Sie dieses Skript ausführen, bleibt es für immer erhalten und zeigt bei jeder Ausführung einen Dialog an. Es gibt nur sehr wenige praktische Anwendungsfälle, in denen Sie eine unendliche Wiederholung wünschen. Stellen Sie daher in der Regel sicher, dass Sie dieser Wiederholungsanweisung, die die Dauer oder Anzahl der Wiederholungen bestimmt, immer zusätzlichen Code hinzufügen.
Wiederholen Sie eine bestimmte Anzahl von Malen
Die nächste Art der Wiederholung wurde in unserem ersten Codebeispiel oben gezeigt. Hier geben wir speziell an, wie oft ein Codeabschnitt wiederholt werden soll. Hier ist ein Beispiel:
[applescript] repeat 2 times display dialog "Hello there!" end repeat [/applescript]
In diesem Code rufen wir ein Dialogfeld mit einer einfachen Nachricht auf. Der Wiederholungsblock ist so eingestellt, dass er dies zweimal ausführt. Sobald der Benutzer auf eine der Schaltflächen im ersten Dialogfeld klickt, wird an seiner Stelle eine andere angezeigt.



Wie ich oben erwähnt habe, ist es normalerweise nicht so hilfreich, genau dasselbe zweimal zu wiederholen. Stattdessen müssen wir einen Weg finden, um die Ausgabe zu variieren. Mal sehen, ob wir den Wiederholungsblock zweimal ausführen können, aber jedes Mal eine andere Meldung anzeigen.
[applescript] set theMessages to {"Hello there!", "Let's learn about AppleScript!"} set x to 1
repeat 2 times display dialog (item x of theMessages) set x to (x + 1) end repeat [/applescript]
Das mag etwas verwirrend erscheinen, aber keine Sorge, es ist wirklich einfach. Wir beginnen mit der Deklaration einer Liste. Mit einer Liste können Sie mehrere Daten in eine einzige Variable zusammenfassen. Hier haben wir zwei verschiedene Zeichenfolgen genommen und sie in "theMessages" geworfen. Wir können auf jedes Listenelement über seine Nummer zugreifen. Also "Hallo!" ist "Punkt 1 der Nachrichten
" und "Lernen wir etwas über AppleScript!" ist "Punkt 2 der Nachrichten
".
Dann nutzen wir ein äußerst wichtiges Konstrukt: einen Zähler. Dies ist das Geheimnis dafür, dass eine Wiederholung jedes Mal etwas anderes macht, wenn sie ausgeführt wird. In diesem Beispiel setzen wir x auf 1 und erhöhen dann x am Ende der Wiederholung. Auf diese Weise erhöht sich der Wert von x jedes Mal, wenn die Wiederholung ausgeführt wird, um eins.
Die Auswirkungen, die dies auf unseren Code hat, sind tiefgreifend. Wenn die Wiederholung zum ersten Mal ausgeführt wird, ist x gleich 1, sodass auf Element 1 unserer Liste zugegriffen wird und unsere erste Nachricht im Dialogfeld angezeigt wird. Dann wird der Wert von x in auf zwei erhöht, wodurch die zweite Nachricht während der Wiederholung zum zweiten Mal angezeigt wird.



Tipp: Beachten Sie, dass wir in einer bestimmten Wiederholung eine Ziffer (2) verwenden müssen. Die Schreibweise, um etwas "zweimal" zu wiederholen, funktioniert nicht.
Wiederholen Sie mit Nummernkreis
Wenn Sie über eine inkrementierende Variable durch etwas blättern möchten, gibt es einen prägnanteren Weg als in unserem vorherigen Beispiel. Mit der Wiederholung mit Konstrukt richten wir einen Zähler ein, der direkt in unsere Schleife integriert ist und über den darin enthaltenen Code aufgerufen werden kann. Lassen Sie uns sehen, wie dies aussieht, indem Sie das vorherige Codebeispiel optimieren:
[applescript] set theMessages to {"Hello there!", "How are you?", "Let's learn about AppleScript!"}
repeat with n from 1 to 3 display dialog (item n of theMessages) end repeat [/applescript]
Wie Sie sehen können, müssen wir diesmal drei Nachrichten durchlaufen. Beachten Sie, dass unser Code tatsächlich vereinfacht wurde. Wir haben die Erstellung und Inkrementierung einer Variablen entfernt und stattdessen den Wiederholungsblock angewiesen, "mit n von 1 bis 3 zu wiederholen".
Dadurch wird eine Variable n erstellt und bei jeder Wiederholung des Blocks um eins erhöht. Die Start- und Zielnummern werden durch den Teil "von 1 bis 3" bestimmt. Wenn dies also zum ersten Mal ausgeführt wird, ist n gleich 1, dann 2 beim nächsten Mal und schließlich 3 beim letzten Mal.
Der schnelle und einfache Zugriff auf die Zählvariable ermöglicht Wiederholungen mit einer äußerst nützlichen Wiederholungsstruktur. Sie werden feststellen, dass Sie dies häufig verwenden.
Wiederholen Sie mit Liste
Es gibt eine andere Form einer Wiederholung mit Block, die die Zahlen ausgräbt und stattdessen speziell so strukturiert ist, dass sie durch die Elemente in einer Liste blättert. Dies ist genau das, was wir versucht haben, also ist dies perfekt für unser Beispiel. Hier ist unser Wiederholungsblock, der noch einmal vereinfacht wurde.
[applescript] set theMessages to {"Hello there!", "How are you?", "Let's learn about AppleScript!"}
repeat with message in theMessages display dialog message end repeat [/applescript]
Dieses Mal weisen wir AppleScript an, den Codeblock mit der message-Variablen in der Liste theMessages zu wiederholen. Dies bedeutet, dass der Codeblock für jedes Element in unserer Liste einmal ausgeführt wird. In diesem Fall wird es also dreimal ausgeführt. Bei jeder Ausführung wird der Inhalt des aktuellen Listenelements in unsere message-Variable eingefügt, auf die wir später in unserem Befehl zum Anzeigen des Dialogfelds zugreifen.
Wiederholen Sie während
Die nächste Wiederholungsschleife, die Sie in Ihrem Code nutzen können, ist Wiederholung während. Dieser ist leicht zu verstehen, aber immer noch super mächtig. Grundsätzlich können Sie einen bestimmten Codeblock wiederholen, während ein bestimmter Boolescher Wert wahr ist. Hier ist ein einfaches Beispiel, das nicht viel bewirkt, aber den Punkt veranschaulicht:
[applescript] set x to true set y to 0
repeat while x if y > 10 then set x to false else set y to y + 1 end if end repeat [/applescript]
In diesem Skript wird der Codeblock unendlich oft wiederholt, solange x wahr ist. Innerhalb der Wiederholung setzen wir jedoch x auf false, wenn y größer als 10 ist, und erhöhen es andernfalls. Dies bedeutet, dass der Code nur einige Male wiederholt werden kann, da y schließlich 10 wird und die Wiederholung dann stoppt.
Beachten Sie, dass ich diese Struktur auch hätte verwenden können:
[applescript] repeat while x is true --code to repeat end repeat [/applescript]
Dieser Code funktioniert einwandfrei, aber das "ist wahr" ist nicht erforderlich. Der Grund dafür liegt im Kern dessen, was ein Boolescher Wert ist und was er tut. Die Variable x in unserem Beispiel ist gleich true, die beiden sind ein und dasselbe.
Wenn Sie dies auf den Kopf stellen möchten, können Sie etwas wiederholen, bis Ihr Boolescher Wert wahr wird. Das funktioniert so:
[applescript] repeat while x is false --code to repeat end repeat [/applescript]
Dies alles scheint ein wenig abstrakt zu sein, also lasst uns etwas Interessantes mit einer Wiederholungs-while-Schleife machen. Wir werden ein grundlegendes Zahlenschätzspiel bauen. Zuerst setzen wir die Antwortvariable auf eine Zufallszahl und unsere Vermutungsvariable auf 0. Als nächstes erstellen wir eine Wiederholungs-while-Schleife, die so lange fortgesetzt wird, wie die Vermutung des Benutzers nicht der zufällig ausgewählten Antwort entspricht.
Innerhalb der Wiederholung wird ein Dialogfeld angezeigt und die an die Schätzvariable zurückgegebene Zahl festgelegt. Dieses Eingabefenster für Vermutungen bleibt bestehen, bis die Vermutung korrekt ist.
[applescript] set answer to random number from 1 to 5 set guess to 0 repeat while guess is not equal to answer set guess to text returned of (display dialog "Guess again! Choose a number from 1 to 5" default answer "1") as number end repeat display dialog "That's right! " & answer & " is the answer!" [/applescript]



Wiederhole bis
Der Code "Wiederholen, während Vermutung nicht gleich Antwort ist" ist nicht sehr einfach zu lesen. Das Negative(ungleich) macht es verwirrend. Wir können dies ein wenig vereinfachen, wenn wir die Wiederholung während der Schleife fallen lassen und stattdessen auf eine Wiederholung bis Schleife schauen. Hier ist das neu geschriebene Zahlen-Ratespiel:
[applescript] set answer to random number from 1 to 5 set guess to 0
repeat until (guess = answer) set guess to text returned of (display dialog "Guess again! Choose a number from 1 to 5" default answer "1") as number end repeat
display dialog "That's right! " & answer & " is the answer!" [/applescript]
Wie Sie sehen können, ist diese Wiederholung viel prägnanter und leicht zu lesen. Denken Sie daran, dass dies nicht immer der Fall ist. Manchmal wird durch eine Wiederholung der Code gespeichert.
Jetzt alle zusammen
Wütend! Es gibt sehr viele verschiedene Arten von Wiederholungsschleifen, nicht wahr? Wenn Sie sich überfordert fühlen, seien Sie nicht. Sie sind alle ziemlich einfach und Sie wären überrascht, wie oft der richtige Wortlaut das erste ist, was Ihnen in den Sinn kommt. Um Sie auf dem Laufenden zu halten, finden Sie hier eine kurze Liste verschiedener Wiederholungsbeispiele:
- repeat 5 times
- repeat n times
- repeat with n from 1 to 5
- repeat with listItem in theList
- repeat while x
- repeat while y is true
- repeat while x is false
- repeat until y
- repeat until (x > y)
Führen Sie beim Schreiben einer Wiederholungsschleife immer einige andere Strukturen in Ihrem Kopf durch, um festzustellen, ob Sie sie kürzer und prägnanter gestalten können. Wie wir oben gesehen haben, können Sie Ihren Code wirklich verbessern, indem Sie offen für die Verwendung verschiedener Konstrukte bleiben.
Bleiben Sie auf dem Laufenden
Sie sollten jetzt ein Experte für AppleScript-Wiederholungsschleifen sein. Wenn Sie diese in Verbindung mit if-Anweisungen nutzen, die wir zuvor kennengelernt haben, können Sie einige unglaublich komplexe und nützliche Skripte erstellen.
In unserem nächsten AppleScript-Artikel wird eine Pause von der Theorie eingelegt und ein Teil dieses Wissens mit einem praktischen Skript verwendet, das Sie sofort auf Ihrem System implementieren können. Schau bald wieder vorbei!