Continuând de-a lungul seriei noastre continue de articole AppleScript, astăzi vom afla despre puterea buclelor repetate, care vă pot economisi tone de efort prin automatizarea repetițiilor și a grupurilor de comenzi. După ce învățați să utilizați repetările, veți putea reduce în mod semnificativ cantitatea de muncă necesară pentru automatizarea sarcinilor, ceea ce înseamnă o codare mai rapidă, mai ușoară și o productivitate mai mare.
Înainte de a începe să învățați despre buclele repetate, asigurați-vă că ați verificat câteva dintre tutorialele noastre anterioare AppleScript.
Dacă ați făcut-o corect prima dată, nu este suficient?
Dacă ați mai făcut vreodată vreun program sau scripting înainte, atunci știți că buclele sunt absolut esențiale pentru a realiza aproape orice feat semnificativ. Cu toate acestea, dacă sunteți nou la ideea de programare, s-ar putea să vă întrebați de ce naiba vreți să repetați ceva. Dacă ați făcut-o corect prima dată, nu este suficient?
Răspunsul, desigur, constă în faptul că frecvent lucrăm cu cantități masive de date. Dacă aveți cinci sute de imagini într-un dosar și doriți să faceți ceva pentru fiecare dintre ele, puteți să tastați aceeași comandă de cinci sute de ori, direcționând-l la un fișier diferit de fiecare dată sau să folosiți o buclă repetată și să salvați sănătate psihică.
Dacă ați citit articolul meu anterior cu privire la afirmațiile condiționate, atunci structura unei buclini repetate ar trebui să fie familiară. Ca și în multe alte constructe AppleScript, bucla repetitivă formează un bloc de cod cu un început și un sfârșit.
[AppleScript]
repetați de 3 ori
--comenzi de repetat
repetați sfârșitul
[/ AppleScript]
După cum puteți vedea, linia inițială începe cu "repetați" și apoi subliniază termenii repetării. Secțiunea intermediară este locul în care vor fi plasate toate comenzile care trebuie repetate, iar ultima linie informează compilatorul că acesta este locul unde se termină bucla.
Exemplul de cod de mai sus este destul de simplu datorită nivelului ridicat de lizibilitate al AppleScript. Orice în acest bloc repetat va fi repetat de trei ori, apoi scriptul va trece mai departe (dacă nu există o acțiune de terminare în repetare).
Un lucru pe care veți dori să-l rețineți este că codul dvs. trebuie să fie scris astfel încât repetarea să de fapt face ceva util. Este adesea cazul în care o anumită secțiune de cod va fi aceeași indiferent dacă îl executați o dată sau de o mie de ori. Depinde de voi să îl modelați astfel încât repetarea să provoace progrese. Vom vedea cum să facem acest lucru în timp ce aflăm despre diferitele tipuri de repetări disponibile.
Într-un articol anterior, am vorbit despre modul în care vă puteți varia dacă declarații considerabil prin diferite combinații de dacă altfel și altfel dacă. Buclele repetate pot atinge un nivel de variație chiar mai mare, deoarece există, de fapt, multe tipuri diferite de bucle repetate în AppleScript. Să trecem peste fiecare și cum funcționează.
Primul tip de repetare este o buclă infinită. Acest lucru se întâmplă dacă pur și simplu folosim un bloc repetat fără modificatori de nici un fel.
[AppleScript]
setați x la "monotonie"
repeta
fereastră de dialog x
repetați sfârșitul
[/ AppleScript]
Dacă executați acest script, acesta va merge pentru totdeauna, afișând un dialog de fiecare dată când execută. Există foarte puține cazuri de utilizare practică în cazul în care doriți o repetare infinită astfel încât, ca regulă generală, asigurați-vă că întotdeauna adăugați cod suplimentar la acea declarație repetată care guvernează durata sau numărul repetării.
Următorul tip de repetare a fost afișat în primul nostru exemplu de cod de mai sus. Aici specificăm de câte ori dorim să repetăm o bucată de cod. Iată un exemplu:
[AppleScript]
repetați de 2 ori
ecranul de dialog "Salut!"
repetați sfârșitul
[/ AppleScript]
În acest cod, afișăm o casetă de dialog care conține un mesaj simplu. Blocul de repetare este setat să execute acest lucru de două ori, astfel încât imediat ce utilizatorul face clic pe unul din butoanele din primul dialog, altul va apărea în locul său.
După cum am menționat mai sus, repetarea aceluiași lucru exact de două ori ca aceasta nu este de obicei utilă. Ceea ce trebuie să facem în schimb este să găsim o modalitate de a varia producția. Să vedem dacă putem reuși blocul repetat să execute de două ori, dar să afișăm un mesaj diferit de fiecare dată.
[AppleScript]
setați mesajele la "Bună ziua!", "Să învățăm despre AppleScript!"
setați x la 1
repetați de 2 ori
afișare (elementul x al mesajelor)
setați x la (x + 1)
repetați sfârșitul
[/ AppleScript]
Acest lucru poate părea puțin confuz, dar nu vă faceți griji, este foarte simplu. Începem prin a declara o listă. O listă vă permite să împachetați mai multe fragmente de date într-o singură variabilă. Aici am luat două șiruri diferite și le-am aruncat în "Mesaje". Putem accesa fiecare element de listă prin numărul său. Deci "Bună ziua!" este "punctul 1 din mesaje
"și" Să învățăm despre AppleScript! "este"punctul 2 din mesaje
".
Apoi, profităm de o construcție extrem de importantă: un contor. Acesta este secretul pentru a face o repetare face ceva diferit de fiecare dată când rulează. Pentru acest exemplu, am stabilit X la 1, atunci am crescut X la sfârșitul repetării. În acest fel, de fiecare dată când se repetă, valoarea lui X crește cu unul.
Efectul pe care îl are acest lucru asupra codului nostru este profund. Prima dată când rulează repetarea, X este egal cu 1, astfel că elementul 1 al listei noastre este accesat și primul nostru mesaj este afișat în dialog. Apoi valoarea X în creștere la două, ceea ce face ca al doilea mesaj să fie afișat a doua oară prin repetare.
Bacsis: Observați că trebuie să folosim o cifră (2) într-o anumită repetare, ortografia pentru a repeta ceva "de două ori" nu va funcționa.
Dacă vreți să treceți prin ceva printr-o variabilă de creștere, există un mod mai succint de parcurs decât de ceea ce am văzut în exemplul nostru anterior. Utilizarea repetați cu construim, am creat un contor care este construit chiar în bucla noastră și poate fi accesat din interiorul codului. Să vedem cum arată acest lucru prin modificarea exemplului codului anterior:
[AppleScript]
setați mesajele la "Buna ziua!", "Cum te simți?", "Să învățăm despre AppleScript!"
repetați cu n de la 1 la 3
afișare (element n din mesaje)
repetați sfârșitul
[/ AppleScript]
După cum puteți vedea, de data aceasta avem trei mesaje de parcurs. Observați că codul nostru a fost efectiv simplificat. Am eliminat creatia si incrementarea unei variabile si am spus ca blocul repetat sa "repeta cu n de la 1 la 3".
Ceea ce face este să creeze o variabilă n, apoi incrementați-l câte unul de fiecare dată când blocul se repetă. Numerele de pornire și finalizare sunt determinate de partea "de la 1 la 3". Deci, pentru prima oară, acest lucru se întâmplă, n va fi egal cu 1, apoi cu 2 data viitoare, iar în cele din urmă cu 3 ultima dată.
Accesul rapid și ușor la variabila de numărare face repetați cu o structură repetată extrem de utilă. Veți găsi că folosiți acest lucru frecvent.
Există o altă formă de a repetați cu care blochează numerele și, în schimb, este structurat în mod specific să circule prin elementele dintr-o listă. Acesta este exact ceea ce am încercat să realizăm, deci este perfect pentru exemplul nostru. Iată blocul nostru repetat, simplificat încă o dată.
[AppleScript]
setați mesajele la "Buna ziua!", "Cum te simți?", "Să învățăm despre AppleScript!"
repetați cu mesajul în Mesaje
afișați mesajul de dialog
repetați sfârșitul
[/ AppleScript]
De data aceasta, îi spunem AppleScript să repete blocul de coduri cu mesaj variabilă în listă theMessages. Ceea ce înseamnă că blocul de cod va fi rulat o dată pentru fiecare element din lista noastră. Deci, în acest caz, se va executa de trei ori. De fiecare dată când rulează, conținutul elementului listei curente este plasat în lista noastră mesaj variabilă, pe care o accesăm mai târziu în comanda noastră de dialog de afișare.
Următoarea buclă de repetiție pe care o puteți utiliza în codul dvs. este repetați în timp. Acest lucru este ușor de înțeles, dar totuși foarte puternic. Practic, vă permite să repetați un anumit bloc de cod în timp ce o dată boolean este adevarat. Iată un exemplu simplu care nu face prea mult, dar ilustrează punctul:
[AppleScript]
setați x la true
setați y la 0
repetați în timp ce x
dacă y> 10 atunci
setați x la false
altfel
setați y la y + 1
sfârșit dacă
repetați sfârșitul
[/ AppleScript]
În acest script, blocul de cod va repeta infinit atâta timp cât X este adevarat. Cu toate acestea, în cadrul repetării, am stabilit X la fals dacă y este mai mare de 10 și crește-l altfel. Aceasta înseamnă că codul se poate repeta numai de câteva ori, deoarece în cele din urmă y va ajunge la 10 și apoi repetarea se va opri.
Rețineți că aș fi putut folosi și această structură:
[AppleScript]
repetați în timp ce x este adevărat
--cod pentru a repeta
repetați sfârșitul
[/ AppleScript]
Acest cod funcționează foarte bine, dar "este adevărat" nu este necesar. Motivul pentru aceasta se află chiar în centrul a ceea ce este boolean și ce face. Variabila X în exemplul nostru este egal Adevărat, cele două sunt una și aceeași.
Acum, dacă vrei să-i transformi asta pe cap, poți repeta ceva până când booleana devine adevărată. Aceasta funcționează astfel:
[AppleScript]
repetați în timp ce x este falsă
--cod pentru a repeta
repetați sfârșitul
[/ AppleScript]
Totul pare puțin abstract, așa că hai să facem ceva interesant cu a repetați în timp buclă. Vom construi un număr de bază care să ghicească jocul. Mai întâi, vom seta variabila răspuns la un număr aleator și variabila estimării la 0. Apoi vom crea a repetați în timp care continuă să funcționeze atât timp cât estimarea utilizatorului nu este egală cu răspunsul selectat aleatoriu.
În interiorul repetării, vom afișa un dialog și vom seta numărul returnat la variabila estimare. Această fereastră de introducere a ghiciilor va persista până când ghiciul este corect.
[AppleScript]
setați răspunsul la numărul aleatoriu de la 1 la 5
ghici la 0
repetați în timp ce estimarea nu este egală cu răspunsul
setați estimarea la textul returnat (afișați dialogul "Ghiciți din nou! Alegeți un număr de la 1 la 5" răspunsul implicit "1") ca număr
repetați sfârșitul
afișați dialogul "Așa-i!" & răspuns & "este răspunsul!"
[/ AppleScript]
Codul "repeta în timp ce estimarea nu este egală cu răspunsul" nu este foarte ușor de citit. Rezultatul negativ (nu este egal cu) îl face confuz. Putem simplifica acest lucru puțin dacă lămurim repetați în timp buclă și în loc să arate la repetați până la buclă. Iată numărul de joc ghici rescris:
[AppleScript]
setați răspunsul la numărul aleatoriu de la 1 la 5
ghici la 0
repetați până (ghici = răspuns)
setați estimarea la textul returnat (afișați dialogul "Ghiciți din nou! Alegeți un număr de la 1 la 5" răspunsul implicit "1") ca număr
repetați sfârșitul
afișați dialogul "Așa-i!" & răspuns & "este răspunsul!"
[/ AppleScript]
După cum puteți vedea, această repetare este mult mai succintă și mai ușor de citit. Rețineți că acest lucru nu va fi întotdeauna cazul, uneori a repetați în timp va fi cel care vă salvează codul.
Uau! Există o groază multe tipuri diferite de bucle repetate nu există? Dacă vă simțiți copleșiți, nu fiți. Toate sunt destul de simple și veți fi surprins de cât de des este corectă formularea corectă care este primul lucru care vă apare în cap. Doar pentru a vă menține pe drumul cel bun, iată o listă rapidă a mai multor exemple repetate:
Când scrieți o buclă repetată, rulați întotdeauna câteva alte structuri din cap pentru a vedea dacă o puteți face mai scurtă și mai succintă. După cum am văzut mai sus, vă puteți îmbunătăți cu adevărat codul, rămânând deschis la folosirea unor construcții diferite.
Ar trebui să fiți acum un expert în buclele de repetare AppleScript. Prin utilizarea acestora în combinație cu dacă declarații, pe care le-am învățat mai devreme, veți putea scoate niște scripturi incredibil de complexe și utile.
De fapt, în următorul nostru articol AppleScript vom lua o pauză de la teorie și vom pune câteva dintre aceste cunoștințe pentru a le folosi cu un script practic pe care îl puteți implementa imediat pe sistemul dvs. Verificați din nou în curând!