Fortsätter i vår pågående serie av AppleScript-artiklar, idag lär vi oss om kraften i upprepade loopar, vilket kan spara dig massor av ansträngningar genom att automatisera upprepade uppgifter och grupper av kommandon. När du lär dig att använda upprepningar kan du minska antalet arbeten som krävs för att automatisera uppgifter, vilket innebär att snabbare, enklare kodning och högre produktivitet.
Innan vi börjar med att lära dig om upprepade loopar, se till att kolla in några av våra tidigare AppleScript-handledning.
Om du gjorde det rätt första gången, är inte en gång tillräckligt?
Om du någonsin har gjort någon programmering eller skript innan, vet du att slingor är absolut nödvändiga för att uppnå nästan alla viktiga prestationer. Men om du är ny på tanken på programmering kanske du undrar varför duck skulle någonsin vilja upprepa något. Om du gjorde det rätt första gången, är inte en gång tillräckligt?
Svaret ligger naturligtvis i det faktum att vi ofta arbetar med massiva datamängder. Om du har femhundra bilder i en mapp och vill göra något för var och en av dem, kan du antingen skriva ut samma kommando femhundra gånger, rikta in det på en annan fil varje gång eller använd en repetitionsslinga och spara din förnuft.
Om du läser min tidigare artikel om villkorliga uttalanden, borde strukturen hos en repetitionsslinga vara bekant. Som med många andra AppleScript-konstruktioner bildar repetitionsslingan ett block med kod med start och slut.
[Apple]
upprepa 3 gånger
--kommandon att repetera
slutet upprepa
[/ Apple]
Som du kan se börjar den inledande raden med "repetera" och skisserar sedan villkoren för upprepningen. Mittsektionen är där alla de olika kommandona som ska upprepas kommer att placeras och den sista raden informerar kompilatorn om att detta är där slingan slutar.
Kodsexemplet ovan är ganska enkelt tack vare AppleScripts höga läsbarhet. Något inom detta repetitionsblock kommer att upprepas tre gånger, så kommer manuskriptet att fortsätta (om det inte finns en uppsägningsåtgärd i repetitionen).
En sak som du kommer att vilja komma ihåg är att din kod måste skrivas på ett sådant sätt att upprepa det faktiskt gör något användbart. Det är ofta så att en viss del av koden kommer att vara densamma om du kör det en eller tusen gånger. Det är upp till dig att forma det på ett sådant sätt att upprepningen orsakar framsteg. Vi får se hur vi gör det när vi lär oss om de olika typerna av upprepningar som är tillgängliga.
I en tidigare artikel pratade vi om hur du kan variera din om uttalanden avsevärt genom olika kombinationer av om annat och annars om. Upprepa loopar kan uppnå en ännu högre variation, eftersom det finns faktiskt många olika typer av upprepade loopar i AppleScript. Låt oss gå över varje och hur det fungerar.
Den första typen av upprepning är en oändlig slinga. Detta sker om vi helt enkelt använder ett repetitionsblock utan några modifieringar av något slag.
[Apple]
sätt x till "monotoni"
upprepa
visningsdialog x
slutet upprepa
[/ Apple]
Om du kör det här skriptet kommer det att gå för evigt, visa en dialogruta varje gång den körs. Det finns väldigt få praktiska användarfall där du vill ha en oändlig upprepning, så att du som regel lägger till extra kod till det upprepade uttalandet som reglerar varaktigheten eller repetitionsantalet.
Nästa typ av upprepning visades i vårt första kodexempel ovan. Här anges specifikt hur många gånger vi vill ha en bit av kod att repetera. Här är ett exempel:
[Apple]
upprepa 2 gånger
displaydialogrutan "Hej där!"
slutet upprepa
[/ Apple]
I denna kod ringer vi upp en dialogruta som innehåller ett enkelt meddelande. Upprepningsblocket är inställt för att utföra detta två gånger, så snart som användaren klickar på en av knapparna i den första dialogrutan kommer en annan popup på sin plats.
Som jag nämnde ovan är det inte typiskt att upprepa exakt samma sak två gånger så här. Vad vi behöver göra istället är ett sätt att ändra produktionen. Låt oss se om vi kan få repetitionsblocket att utföras två gånger, men visa ett annat meddelande varje gång.
[Apple]
ställ in theMessages till "Hej där!", "Låt oss lära oss om AppleScript!"
Ange x till 1
upprepa 2 gånger
displaydialogrutan (objekt x av theMessages)
ställa x till (x + 1)
slutet upprepa
[/ Apple]
Det kan tyckas lite förvirrande, men oroa dig inte, det är verkligen enkelt. Vi börjar med att förklara en lista. En lista låter dig lägga in flera bitar av data upp till en enda variabel. Här har vi tagit två olika strängar och kastat dem till "theMessages". Vi kan komma åt varje listobjekt med dess nummer. Så "Hej där!" är "föremål 1 av theMessages
"och" Låt oss lära oss om AppleScript! "är"punkt 2 av theMessages
".
Därefter utnyttjar vi en extremt viktig konstruktion: en räknare. Detta är hemligheten att göra en upprepa göra något annorlunda varje gång det går. För detta exempel ställer vi in x att vara lika med 1, då ökade vi x i slutet av upprepningen. På så sätt, varje gång repetitionen körs, värdet av x ökar med en.
Effekten som detta har på vår kod är djupgående. Första gången upprepningen går, x är lika med 1, så är punkt 1 i vår lista tillgänglig och vårt första meddelande visas i dialogrutan. Då värdet av x i ökat till två, vilket medför att det andra meddelandet visas den andra gången genom repetitionen.
Tips: Observera att vi måste använda ett tal (2) i en specifik upprepning, stavning ut för att upprepa något "två gånger" kommer inte att fungera.
Om du vill cykla genom något via en ökande variabel, finns det ett mer kortfattat sätt att gå över det än vad vi såg i vårt tidigare exempel. Använda upprepa med konstruera, vi sätter upp en räknare som är byggd direkt in i vår slinga och kan nås från koden inom. Låt oss se hur det här ser ut genom att tweaking det föregående kodexemplet:
[Apple]
ställ in theMessages till "Hej där!", "Hur mår du?", "Låt oss lära oss om AppleScript!"
upprepa med n från 1 till 3
displaydialogrutan (objekt n av MESSAGES)
slutet upprepa
[/ Apple]
Som du kan se, den här gången har vi tre meddelanden att cykla igenom. Observera att vår kod faktiskt har förenklats. Vi har tagit bort skapandet och ökningen av en variabel och berättade i stället för repetitionsblocket för att "repetera med n från 1 till 3".
Vad detta gör är att skapa en variabel n, öka sedan det med en varje gång blocket upprepas. Start- och avslutningsnummer bestäms av delen "från 1 till 3". Så första gången körs det här, n kommer att vara lika med 1, sedan 2 nästa gång och slutligen 3 sista gången.
Snabb och enkel åtkomst till räkningsvariabeln gör upprepa med en extremt användbar upprepningsstruktur. Du hittar dig själv med det här ofta.
Det finns en annan form av a upprepa med blockera att dike numren och i stället är speciellt strukturerad för att cykla genom objekten i en lista. Det är precis vad vi försökt uppnå, så det här är perfekt för vårt exempel. Här är vårt återkommande block, förenklat än en gång.
[Apple]
ställ in theMessages till "Hej där!", "Hur mår du?", "Låt oss lära oss om AppleScript!"
Upprepa med meddelande i meddelandena
visningsdialogmeddelande
slutet upprepa
[/ Apple]
Den här gången berättar vi AppleScript att upprepa kodblocket med meddelande variabel i listan theMessages. Vad detta innebär är att kodblocket kommer att köras en gång för varje objekt i vår lista. Så i det här fallet kommer det att springa tre gånger. Varje gång den körs placeras innehållet i det aktuella listobjektet i vår meddelande variabel, som vi öppnar i vårt visningsdialogkommando senare.
Nästa repetitionsslinga som du kan hävda i din kod är repetera medan. Den här är lätt att förstå men fortfarande super kraftfull. I grund och botten tillåter du att upprepa ett visst block av kod medan en given boolean är sant. Här är ett enkelt exempel som inte gör mycket, men illustrerar punkten:
[Apple]
Ange x till true
sätt y till 0
repetera medan x
om y> 10 då
ställa x till false
annan
ställ y till y + 1
avsluta om
slutet upprepa
[/ Apple]
I det här skriptet kommer kodblocket att upprepas oändligt så länge som x är sant. Men inuti repetitionen ställer vi in x att falska om y är större än 10, och ökar det annars. Detta innebär att koden endast kan upprepas några gånger eftersom det till slut y kommer att komma till 10 och sedan kommer upprepningen att sluta.
Observera att jag kunde ha använt den här strukturen också:
[Apple]
upprepa när x är sant
--kod att repetera
slutet upprepa
[/ Apple]
Koden fungerar bara bra, men "sant" är inte nödvändigt. Anledningen till detta får i själva verket bara vad en booleska är och vad den gör. Variabeln x i vårt exempel är lika med Sann, de två är en och samma.
Nu, om du vill vända på huvudet, kan du upprepa något tills din booleska blir sann. Det fungerar så här:
[Apple]
upprepa när x är falskt
--kod att repetera
slutet upprepa
[/ Apple]
Allt detta verkar lite abstrakt, så låt oss göra något intressant med a repetera medan slinga. Vi bygger ett grundläggande antal gissningsspel. Först ställer vi svarvariabeln i ett slumpmässigt tal och vår gissvariabel till 0. Nästa skapar vi en repetera medan slinga som fortsätter så länge som användarens gissning inte är lika med det slumpmässigt valda svaret.
Inuti repetitionen visar vi en dialogruta och sätter numret tillbaka till gissvariabeln. Detta gissningsfönster kommer att bestå tills gissningen är korrekt.
[Apple]
Ange svar på slumptal från 1 till 5
gissa till 0
upprepa medan gissningen inte är lika med svaret
gissa att text returneras av (visningsdialogrutan "Gissa igen! Välj ett tal från 1 till 5" standardsvar "1") som nummer
slutet upprepa
displaydialogrutan "Det är rätt!" & svar & "är svaret!"
[/ Apple]
Koden "upprepa medan gissningen inte är lika med svaret" är inte så lätt att läsa. Den negativa (inte lika med) gör det förvirrande. Vi kan förenkla det här lite om vi döljer repetera medan loop och istället titta till a upprepa tills slinga. Här är antalet gissningsspel omskrivna:
[Apple]
Ange svar på slumptal från 1 till 5
gissa till 0
upprepa tills (gissa = svara)
gissa att text returneras av (visningsdialogrutan "Gissa igen! Välj ett tal från 1 till 5" standardsvar "1") som nummer
slutet upprepa
displaydialogrutan "Det är rätt!" & svar & "är svaret!"
[/ Apple]
Som du kan se är denna upprepa mycket mer kortfattad och lätt att läsa. Tänk på att det inte alltid kommer att bli fallet, ibland a repetera medan kommer att bli den som sparar kod.
Puh! Det finns en hel del olika typer av upprepade loopar finns inte där? Om du känner dig överväldigad, var det inte. De är alla ganska enkla och du skulle bli förvånad över hur ofta den rätta formuleringen är den första som dyker upp i ditt huvud. Bara för att hålla dig på rätt spår, här är en snabb lista över några olika repetitionsexempel:
När du skriver en repetitionsslinga, löp alltid igenom några andra strukturer i ditt huvud för att se om du kan göra det kortare och mer kortfattat. Som vi såg ovan kan du verkligen förbättra din kod genom att vara öppen för att använda olika konstruktioner.
Du ska nu vara expert på AppleScript-repetitionsslingor. Genom att utnyttja dessa i samband med om uttalanden, som vi lärde oss om tidigare, kommer du att kunna dra av några otroligt komplexa och användbara skript.
Faktum är att vi i vår nästa AppleScript-artikel tar en paus från teorin och lägger lite av den här kunskapen för att använda med ett praktiskt manus som du kan implementera på ditt system direkt. Kolla tillbaka snart!