Fortsetter i vår pågående serie av AppleScript-artikler, i dag skal vi lære om kraften til gjentagelsesløkker, som kan spare deg for mye arbeid ved å automatisere gjentatte oppgaver og grupper av kommandoer. Etter at du lærer å bruke repeter, vil du kunne redusere mengden arbeid som kreves for å automatisere oppgaver, noe som betyr raskere, enklere koding og høyere produktivitet.
Før vi begynner med å lære om gjentatte sløyfer, må du sjekke ut noen av våre tidligere AppleScript-veiledninger.
Hvis du gjorde det riktig første gang, er det ikke nok nok?
Hvis du noen gang har gjort noen programmering eller skripting før, vet du at sløyfer er helt kritiske for å oppnå nesten enhver signifikant prestasjon. Men hvis du er ny på ideen om programmering, kan du lure på hvorfor duckene du noen gang vil gjenta noe. Hvis du gjorde det riktig første gang, er det ikke nok nok?
Svaret ligger selvsagt i at vi ofte jobber med massive datamengder. Hvis du har fem hundre bilder i en mappe og vil gjøre noe for hver enkelt av dem, kan du enten skrive ut samme kommando fem hundre ganger, målrette den til en annen fil hver gang, eller bruk en gjentagelsesslange og lagre din tilregnelighet.
Hvis du leser min forrige artikkel om betingede utsagn, bør strukturen til en repetitionssløyfe være kjent. Som med mange andre AppleScript-konstruksjoner danner gjentagelsessløyfen en blokk med kode med start og slutt.
[Apple]
gjenta 3 ganger
--kommandoer for å gjenta
slutt gjenta
[/ Apple]
Som du kan se begynner den første linjen med "repeat" og beskriver deretter betingelsene for gjentakelsen. Midtdelen er hvor alle de forskjellige kommandoene som skal gjentas, plasseres og den siste linjen informerer kompilatoren om at dette er hvor sløyfen slutter.
Kodeeksempelet ovenfor er ganske greit takket være AppleScripts høye lesbarhet. Alt i denne repeteringsblokken vil gjentas tre ganger, så vil skriptet gå videre (med mindre det er en avslutningshandling i repetisjonen).
En ting du vil ønske å huske på er at koden din må skrives på en slik måte at det gjentas det faktisk gjør noe nyttig. Det er ofte slik at en gitt del av koden vil være den samme om du kjører den en eller tusen ganger. Det er opp til deg å forme det på en slik måte at gjentakelsen fører til fremgang. Vi får se hvordan du gjør dette når vi lærer om de forskjellige typer gjentagelser som er tilgjengelige.
I en tidligere artikkel snakket vi om hvordan du kan variere din hvis uttalelser betydelig gjennom ulike kombinasjoner av hvis, ellers og eller hvis. Gjenta løkker kan oppnå et enda høyere variasjonsnivå fordi det faktisk finnes mange forskjellige typer gjentagelsesløkker i AppleScript. La oss gå over hver og hvordan det fungerer.
Den første typen gjentagelse er en uendelig sløyfe. Dette skjer hvis vi bare bruker en repeteringsblokk uten noen modifikatorer av noe slag.
[Apple]
sett x til "monotoni"
gjenta
visningsdialog x
slutt gjenta
[/ Apple]
Hvis du kjører dette skriptet, går det for alltid, viser en dialog hver gang den kjøres. Det er svært få praktiske brukstilfeller der du vil ha en uendelig gjentagelse, så sørg for at du alltid legger til ekstra kode i den gjenta setningen som styrer varigheten eller tellingen av gjenta.
Den neste typen gjentagelse ble vist i vårt første kodeeksempel ovenfor. Dette er hvor vi spesifikt oppgir hvor mange ganger vi vil ha en del kode for å gjenta. Her er et eksempel:
[Apple]
gjenta 2 ganger
vise dialogboksen "Hei der!"
slutt gjenta
[/ Apple]
I denne koden ringer vi opp en dialogboks som inneholder en enkel melding. Gjenta-blokken er satt til å utføre dette to ganger, så så snart brukeren klikker en av knappene i den første dialogboksen, vil en annen komme opp på plass.
Som jeg nevnte ovenfor, er det ikke vanligvis så nyttig å gjenta nøyaktig samme ting to ganger som dette. Det vi trenger å gjøre i stedet, er å finne ut hvordan vi kan variere produksjonen. La oss se om vi kan få repeteringsblokken til å utføres to ganger, men viser en annen melding hver gang.
[Apple]
settMessages til "Hei der!", "La oss lære om AppleScript!"
sett x til 1
gjenta 2 ganger
visningsdialog (element x av meldingene)
sett x til (x + 1)
slutt gjenta
[/ Apple]
Dette kan virke litt forvirrende, men ikke bekymre deg, det er veldig enkelt. Vi starter med å erklære en liste. En liste lar deg vikle flere deler av data opp i en enkelt variabel. Her har vi tatt to forskjellige strenger og kastet dem til "theMessages". Vi kan få tilgang til hvert liste element ved sitt nummer. Så "Hei!" er "element 1 av meldingene
"og" La oss lære om AppleScript! "er"element 2 av theMessages
".
Deretter benytter vi en ekstremt viktig konstruksjon: en teller. Dette er hemmeligheten til å gjøre en gjentagelse, gjør noe annerledes hver gang det går. For dette eksempelet setter vi x å være lik 1, så økte vi x på slutten av gjenta. På denne måten, hver gang repetisjonen går, verdien av x øker med en.
Effekten som dette har på vår kode er dyp. Første gang gjenta kjører, x er lik 1, slik at punkt 1 i vår liste er tilgjengelig, og vår første melding vises i dialogboksen. Så verdien av x i økt til to, noe som får den andre meldingen til å vises den andre gangen gjennom repetisjonen.
Tips: Legg merke til at vi må bruke et tall (2) i en bestemt gjentagelse, stave ut for å gjenta noe "to ganger" vil ikke fungere.
Hvis du ønsker å sykle gjennom noe via en økende variabel, er det en mer kortfattet måte å gå om det enn det vi så i vårt tidligere eksempel. Bruker gjenta med konstruere, vi setter opp en teller som er bygget rett inn i vår sløyfe og kan nås fra koden i. La oss se hvordan dette ser ut ved å justere forrige kodeeksempel:
[Apple]
sett innMessages til "Hei der!", "Hvordan går det?", "La oss lære om AppleScript!"
gjenta med n fra 1 til 3
visningsdialogboksen (element n av meldingene)
slutt gjenta
[/ Apple]
Som du kan se, denne gangen har vi tre meldinger å sykle gjennom. Legg merke til at vår kode faktisk har blitt forenklet skjønt. Vi har fjernet etableringen og økningen av en variabel, og i stedet fortalte repeteringsblokken å "gjenta med n fra 1 til 3".
Hva dette gjør er å opprette en variabel n, Deretter øker du det med en hver gang blokken repeterer. Start- og sluttnummeret bestemmes av delen "fra 1 til 3". Så første gang dette kjøres, n vil være lik 1, deretter 2 neste gang, og til slutt 3 siste gang.
Rask og enkel tilgang til tellevariabelen gjør gjenta med en ekstremt nyttig gjentatt struktur. Du vil finne deg selv å bruke dette ofte.
Det er en annen form for a gjenta med blokkere at grøfter tallene og i stedet er spesielt strukturert for å sykle gjennom elementene i en liste. Dette er akkurat det vi har prøvd å oppnå, så dette er perfekt for vårt eksempel. Her er vår gjentagende blokk, forenklet enda en gang.
[Apple]
sett innMessages til "Hei der!", "Hvordan går det?", "La oss lære om AppleScript!"
gjenta med melding i meldingene
vis dialogboksen
slutt gjenta
[/ Apple]
Denne gangen forteller vi AppleScript å gjenta kodeblokken med budskap variabel i listen theMessages. Hva dette betyr er at kodeblokken vil løpe en gang for hvert element i vår liste. Så i dette tilfellet vil det løpe tre ganger. Hver gang den kjører, blir innholdet i det nåværende listepunktet plassert i vår budskap variabel, som vi får tilgang til i vår visningsdialogkommando senere.
Neste repetisjonssløp som du kan utnytte i koden din er gjenta mens. Denne er lett å forstå, men fortsatt super kraftig. I utgangspunktet lar det deg gjenta en gitt blokk med kode mens en gitt boolean er sant. Her er et enkelt eksempel som ikke gjør mye, men illustrerer poenget:
[Apple]
sett x til ekte
sett y til 0
gjenta mens x
hvis y> 10 da
sett x til falsk
ellers
sett y til y + 1
slutt om
slutt gjenta
[/ Apple]
I dette skriptet vil kodenes blokk gjentas uendelig så lenge som x er sant. Imidlertid, innenfor repetisjonen, setter vi x å falske hvis y er større enn 10, og øker det ellers. Dette betyr at koden bare kan gjenta noen ganger fordi det til slutt y kommer til å komme til 10 og deretter vil gjenta stoppe.
Legg merke til at jeg kunne ha brukt denne strukturen også:
[Apple]
gjenta mens x er sant
--kode for å gjenta
slutt gjenta
[/ Apple]
Denne koden fungerer bare bra, men "er sant" er ikke nødvendig. Årsaken til dette blir selve kjernen til bare hva en boolsk er, og hva den gjør. Variabelen x i vårt eksempel er lik ekte, de to er ett og det samme.
Nå, hvis du vil slå dette på hodet, kan du gjenta noe til din boolske blir sant. Dette virker slik:
[Apple]
gjenta mens x er feil
--kode for å gjenta
slutt gjenta
[/ Apple]
Alt dette virker litt abstrakt, så la oss gjøre noe interessant med en gjenta mens sløyfe. Vi bygger et grunnleggende nummer gjetting spill. Først vil vi sette svarvariabelen til et tilfeldig tall og vår gjetningsvariabel til 0. Deretter oppretter vi en gjenta mens sløyfe som fortsetter å gå så lenge brukerens gjetning ikke er lik det tilfeldig valgte svaret.
Inne i gjenta, viser vi en dialog og setter nummeret tilbake til gjetningsvariabelen. Dette gjetningspostvinduet vil fortsette til gjetningen er riktig.
[Apple]
sett svar på tilfeldig tall fra 1 til 5
sett gjetning til 0
gjenta mens gjetning ikke svarer til svar
sett gjetning til tekst returnert av (visningsdialog "Gjett igjen! Velg et tall fra 1 til 5" standard svar "1") som nummer
slutt gjenta
vise dialogboksen "Det stemmer!" & svar & "er svaret!"
[/ Apple]
Koden "gjenta mens gjetning ikke svarer til svar" er ikke veldig lett å lese. Den negative (ikke lik) gjør det forvirrende. Vi kan forenkle dette litt hvis vi grøfter gjenta mens loop og i stedet se til a gjenta til sløyfe. Her er nummergissespillet omskrevet:
[Apple]
sett svar på tilfeldig tall fra 1 til 5
sett gjetning til 0
gjenta til (gjett = svar)
sett gjetning til tekst returnert av (visningsdialog "Gjett igjen! Velg et tall fra 1 til 5" standard svar "1") som nummer
slutt gjenta
vise dialogboksen "Det stemmer!" & svar & "er svaret!"
[/ Apple]
Som du kan se, er denne gjenta mye mer kortfattet og lett å lese. Husk at dette ikke alltid vil være tilfelle, noen ganger a gjenta mens vil være den som sparer deg kode.
Puh! Det er forferdelig mange forskjellige typer gjentagssløkker er ikke der? Hvis du føler deg overveldet, vær ikke så. De er alle ganske enkle, og du vil bli overrasket over hvor ofte riktig ordlyd er det første som kommer inn i hodet ditt. Bare for å holde deg på sporet, er det en rask liste over noen forskjellige gjentatte eksempler:
Når du skriver en repeteringsløype, må du alltid løpe gjennom noen andre strukturer i hodet ditt for å se om du kan gjøre det briefer og mer kortfattet. Som vi så over, kan du virkelig forbedre koden din ved å holde deg åpen for å bruke forskjellige konstruksjoner.
Du bør nå være en ekspert på AppleScript-gjentaksløyfer. Ved å utnytte disse sammen med hvis uttalelser, som vi lærte om før, vil du kunne trekke ut noen utrolig komplekse og nyttige skript.
Faktisk vil i vår neste AppleScript-artikkel ta en pause fra teori og sette litt av denne kunnskapen til bruk med et praktisk skript som du kan implementere på systemet med en gang. Kom tilbake snart!