Spar tid og krefter med Applescript Gjenta Loops

Save tid og krefter med Applescript Gjenta Loops

Fortsetter sammen i vår pågående serie av Apple artikler, i dag skal vi lære om kraften i gjentatte looper, som kan spare deg tonnevis arbeid ved å automatisere repeterende oppgaver og grupper av kommandoer. Når du lære å bruke gjentakelser, vil du være i stand til å betydelig kutte ned på hvor mye arbeid det tar å automatisere oppgaver, noe som betyr raskere, enklere koding og høyere produktivitet.



mer Stor Apple Guider

Før vi kommer i gang med å lære om gjentatte looper, bør du sjekke ut noen av våre tidligere Apple tutorials.

Den ultimate for nybegynnere for Applescript

Avansert Apple Teknikker

Hvis og If Else: Apple betinget utsagn

starte din favoritt Apps i grupper med Applescript

Gjenta Sounding Joy

Hvis du gjorde det riktig første gang, er ikke en gang nok?

Hvis du noen gang har gjort noe programmering eller skripting før, så vet du at sløyfene er helt avgjørende for å oppnå nesten enhver betydelig prestasjon . Men hvis du er ny til ideen om programmering, du kanskje lurer på hvorfor pokker ville du noen gang ønsker å gjenta noe. Hvis du gjorde det riktig første gang, er ikke en gang nok?

Svaret er selvfølgelig ligger i det faktum at vi ofte arbeider med massive mengder data. Hvis du har fem hundre bilder i en mappe og ønsker å gjøre noe til hver og en av dem, så kan du enten skrive ut den samme kommandoen fem hundre ganger, rettet mot det på en annen fil hver gang, eller bruke en gjentakelse sløyfe og lagre tilregnelighet.

strukturen i en Gjenta Loop

Hvis du leser min forrige artikkel om betinget utsagn, da strukturen i en gjentakelse sløyfe bør være kjent. Som med mange andre Applescript konstruerer, danner gjenta sløyfe en blokk med kode med en start og slutt.

[Applescript] gjenta 3 ganger --commands til repeatend gjenta [/Applescript]

Som du kan se, den første linjen begynner med "gjenta" og deretter skisserer vilkårene for gjentakelse. Den midterste delen er der alle de ulike kommandoer som skal gjentatte vil bli plassert og den siste linjen informerer kompilatoren at dette er hvor løkken slutter.
Strukturen av en gjentakelse sløyfe.

Koden eksempelet ovenfor er ganske enkle takk til Apple høye nivå av lesbarhet. Alt innenfor denne gjenta blokken vil bli gjentatt tre ganger, så skriptet vil gå videre (med mindre det er en avslutning handling i gjenta).

En ting som du kommer til å ønske å huske på er at din kode må skrives på en slik måte at å gjenta det faktisk gjør noe nyttig. Det er ofte slik at en gitt del av koden vil være den samme enten du kjører det en gang eller tusen ganger. Det er opp til deg å forme den på en slik måte at den gjentar forårsaker fremgang. Vi får se hvordan du gjør dette når vi lærer om de forskjellige typer repetisjoner som er tilgjengelige.

Typer Gjenta Loops

I en tidligere artikkel snakket vi om hvordan du kan variere din hvis
uttalelser betydelig gjennom ulike kombinasjoner av if, else Hotell og annet hvis
. Gjenta løkker kan oppnå et enda høyere nivå av variasjon fordi det er faktisk mange forskjellige typer gjenta looper i Applescript. La oss gå over hver og hvordan det fungerer.

En Infinite Loop

Den første typen gjentakelse er en uendelig loop. Dette skjer hvis vi bare bruke en gjentakelse blokk uten modifikatorer av noe slag

[Applescript] satt x til ". Monotonien " gjenta skjerm dialog xend gjenta [/Applescript]

Hvis du kjører dette skriptet, vil det gå for alltid, viser en dialogboks hver gang den utfører. Det er svært få praktisk bruk tilfeller hvor du ønsker en uendelig gjenta det, som hovedregel, sørg for at du alltid legge til ekstra kode til at gjenta utsagnet som styrer varigheten eller telling av gjentakelse.

Gjenta et bestemt antall ganger

Den neste typen gjenta ble vist i vår første koden eksempelet ovenfor. Det er der vi spesifikt sier hvor mange ganger vi vil ha en del av kode for å gjenta. Her er et eksempel:

[Applescript] gjenta 2 ganger vise dialogboksen " Hello there " slutten gjenta [/Applescript]

I denne koden, vi kaller opp en dialogboks som inneholder en enkelt! beskjed. Gjentakelses blokken er satt til å utføre dette to ganger, slik at så snart brukeren klikker på en av knappene i den første dialogboksen, vil en annen dukker opp på samme sted.
Samme vindu vil dukke opp to ganger.

Som jeg nevnt ovenfor, gjenta akkurat det samme to ganger som dette er vanligvis ikke så nyttig. Det vi trenger å gjøre i stedet er å finne ut en måte å variere produksjonen. La oss se om vi kan få gjenta blokk å utføre to ganger, men viser en annen melding hver gang

[Applescript] satt theMessages til {". Hello there ", "! La oss lære om Apple "!;} sette x til en

gjenta to ganger vise dialogboksen (element x fra theMessages) sett x til (x + 1) end gjenta [/Applescript]

Dette kan virke litt forvirrende, men ikke bekymre deg, det er veldig enkelt. Vi starter med å erklære en liste. En liste lar deg pakke flere stykker av data opp i en enkelt variabel. Her har vi tatt to forskjellige strenger og kastet dem inn i "theMessages". Vi kan få tilgang til hvert listepunkt ved sin nummer. Så "Hei!" er "element 1 av theMessages" og "La oss lære om Applescript!" er "punkt 2 theMessages"

Deretter tar vi nytte av en ekstremt viktig konstruere. en teller. Dette er hemmeligheten til å gjøre en reprise gjøre noe annerledes hver gang det kjører. For dette eksempelet, setter vi x
til lik 1, så vi økes x
på slutten av gjentakelses. På denne måten hver gang gjenta løper, verdien av x
øker med én.

Den effekten dette har på vår kode er dyp. Den første gangen gjentakelses går, x
er lik 1, så punkt 1 i vår liste er tilgjengelig og vår første meldingen vises i dialogboksen. Da verdien av x
i økt til to, noe som fører til den andre meldingen som skal vises andre gang gjennom gjenta
Denne gangen er to ulike meldinger vises

Tips:.. Legg merke til at vi må bruke et tall (2) i en bestemt gjenta, staving ut til å gjenta noe "to ganger" vil ikke fungere.

Gjenta Med Number Range

Hvis du er ute etter å sykle gjennom noe via en øker variable, er det en mer konsis måte å gå om det enn hva vi så i forrige eksempel. Bruke gjenta med
konstruere, setter vi opp en teller som er innebygd i loop og kan nås fra koden i. La oss se hvordan dette ser ut ved å tilpasse den forrige koden eksempel:

[Applescript] satt theMessages til {" Hello there ", " Hvordan er du ", " La oss lære om Applescript!?! "}

gjenta med n 1-3 display dialog (element n av theMessages) end gjenta [/Applescript]

Som du kan se, denne gangen har vi tre meldinger til syklus gjennom. Legg merke til at vår kode har faktisk blitt forenklet skjønt. Vi har strippet ut etablering og inkrementering av en variabel og i stedet fortalte gjenta blokk til "gjenta med n 1-3".

Hva dette er å lage en variabel n
, deretter øke det ved en hver gang blokken gjentas. De starter og etterbehandling tall bestemmes av "1-3" del. Så første gang dette kjøres, n
vil tilsvare en, deretter to neste gang, og til slutt tre siste gang.

Rask og enkel tilgang til de teller variable merker gjenta med
et svært nyttig gjenta struktur. Du vil finne deg selv bruker dette ofte.

Gjenta Med liste

Det er en annen form for en gjenta med
blokk som grøfter tall og i stedet er spesielt strukturert for å bla gjennom elementene i en liste. Dette er akkurat hva vi har prøvd å få til, så dette er perfekt for vårt eksempel. Her er vår gjenta blokk, forenklet ennå igjen

[Applescript] satt theMessages til. {&Quot; Hello there ", "! Hvordan har du det ", "? La oss lære om Apple "!}

gjenta med melding i theMessages vise dialogboksen messageend gjenta [/Applescript]

Denne gangen, vi forteller Applescript til å gjenta kodeblokk med melding
variabel i listen theMessages
. Hva dette betyr er at koden blokken vil kjøre en gang for hvert element i vår liste. Så i dette tilfellet, vil det kjøres tre ganger. Hver gang det kjøres, er innholdet i den gjeldende listen plasseres elementet i vår melding
variabel, som vi har tilgang til i vår dialog kommando skjerm senere.

Gjenta Mens

neste gjenta loop som du kan utnytte i koden din er repeat mens
. Dette er lett å forstå, men likevel super kraftig. I utgangspunktet, det kan du gjenta en gitt kodeblokk mens en gitt boolsk
er sant. Her er et enkelt eksempel som ikke gjør mye, men illustrerer poenget:

[Applescript] satt x til trueset y til

gjenta 0 mens x hvis y > 10 så sette x til false ellers sette y til y + 1 end IfEnd gjenta [/Applescript]

I dette skriptet, vil blokken med kode gjenta uendelig så lenge x
er sant. Men inne i repeat, setter vi x
til usann hvis y
er større enn 10, og øke det ellers. Dette betyr at koden kan bare gjenta et par ganger fordi slutt y
kommer til å få til 10 og deretter gjenta vil stoppe.

Merk at jeg kunne har brukt denne strukturen samt :

[Applescript] repeat mens x er sant --code å repeatend gjenta [/Applescript]

Denne koden fungerer helt fint, men "er sant" er ikke nødvendig. Grunnen til dette blir i selve kjernen av akkurat hva en boolsk er og hva den gjør. Den variable x
i vårt eksempel er lik true
, de to er en og samme.

Nå, hvis du ønsker å snu dette på hodet, kan du gjenta noe til din boolsk blir sant. Dette fungerer slik:

[Applescript] repeat mens x er falsk --code å repeatend gjenta [/Applescript]

Alt dette virker litt abstrakt, så la oss gjøre noe interessant med en < em> repeat mens
loop. Vi vil bygge en grunnleggende tall gjettelek. Først vil vi sette svaret variabelen til et tilfeldig tall og vår gjetning variabel til 0. Deretter vil vi lage en repeat mens
loop som fortsetter å gå så lenge brukerens gjetning er ikke lik tilfeldig valgt svar.

Inne i repeat, vil vi vise en dialog og angi antall returnerte til gjetning variabel. Dette innlegget vindu gjetning vil vedvare inntil gjetning er riktig.

[Applescript] satt svaret på tilfeldig tall fra 1 til 5set gjette til 0Gjentar mens gjetning er ikke lik for å svare sette gjette på tekst returnert av (display dialog " Gjett igjen Velg et nummer fra 1 til 5 "! standard~~POS=TRUNC " en ") som numberend repeatdisplay dialog " Det er riktig! &Quot; &Amp; besvare & &Quot; er svaret " [/Applescript]
Dette vinduet lar brukeren å gjette et tall, og vil gjenta til gjetning er riktig
Gjenta inntil

Koden "repeat stund. gjette er ikke lik svare "
er ikke veldig lett å lese. Den negative (ikke lik) gjør det forvirrende. Vi kan forenkle dette litt hvis vi droppe repeat mens
sløyfe og i stedet se til en gjenta inntil
loop. Her er nummer gjette spillet omskrevet:

[Applescript] satt svaret på tilfeldig tall fra 1 til 5set gjette til

gjenta 0 til (gjett = svar) satt gjette på tekst returnert av (display dialog " Gjett igjen Velg et nummer fra 1 til 5 "! standard~~POS=TRUNC " en ") som numberend gjenta

dialogboksen " skjerm; Det er riktig! &Quot; &Amp; besvare & &Quot; er svaret " [/Applescript]

Som du kan se, dette gjentar er mye mer konsis og lett å lese. Husk at dette vil ikke alltid være tilfelle, noen ganger et repeat mens
vil være den som sparer deg koden.

All Together Now

Puh! Det er en forferdelig mange forskjellige typer av gjentatte gjentakelser er ikke det? Hvis du føler deg overveldet, ikke vær. De er alle ganske enkel, og du vil bli overrasket over hvor ofte den rette ordlyden er det første som kommer inn i hodet. Bare for å holde deg på sporet, her er en rask liste over noen forskjellige gjentatte eksempler:

Gjenta 5 ganger

repeat n
ganger

gjenta med n
1-5

gjenta med listitem
i thelist

repeat mens x


repeat mens y
er sant

repeat mens x
er falsk

gjenta til y


gjenta til ( x
> y
)

Når du skriver en gjentakelse sløyfe, alltid kjøre gjennom et par andre strukturer i hodet for å se om du kan gjøre det kortere og mer konsis. Som vi så ovenfor, kan du virkelig forbedre koden ved å holde åpent til ved hjelp av ulike konstruksjoner.

Stay In The Loop

Du skal nå være en ekspert på Apple gjenta sløyfer. Ved å utnytte disse i forbindelse med hvis
utsagn, som vi har lært om før, vil du være i stand til å trekke frem noen utrolig kompliserte og nyttige skript.

faktisk i vår neste Applescript artikkel vil ta en pause fra teori og sette noen av denne kunnskapen til å bruke med en praktisk skript som du kan implementere på systemet med en gang. Kom tilbake snart!