Avansert Apple Techniques

Advanced Apple Teknikker

Vi har tidligere tilbudt en grunnleggende innføring i Applescript, og denne artikkelen vil dekke en rekke nyttige Apple tips og triks for å hjelpe deg å lage noen fantastiske avanserte skript.


Dette er en del av en serie innlegg som revisits noen av våre lesere favoritt tutorials fra fortiden som fortsatt inneholde kjempebra og relevant informasjon som du kan finne nyttig. Dette innlegget ble opprinnelig publisert 24. september 2009.

Først lekser

Dette er den tredje artikkelen i min serie på automatisering gjøre. Pass på å sjekke ut min Nybegynner Guides til både Applescript og Automator til å bli kjent med scripting og automatisering generelt.

I de artiklene jeg dekke grunnleggende funksjoner som variabler som jeg ikke vil forklare her for å redusere redundans. Etter at du har gjort deg kjent med grunnleggende Applescript, vil du være klar til å hoppe inn i godsakene. La oss komme i gang!

Hvis og If, Else

"Hvis" og "hvis, Else" uttalelser blir brukt når du har en viss kommando eller et sett med kommandoer som du vil skriptet til å utføre bare dersom de angitte krav er oppfylt.

for eksempel, si at du vil at skriptet skal fortelle deg om verdien av to variabler, x og y, er lik eller forskjellig. Du vil bruke en "hvis" statement å fortelle skriptet hvordan du reagerer på hver situasjon

Det er bare tre muligheter:. X er større enn y, y større enn x, eller x = y. La oss starte med en grunnleggende "hvis" statement og gjøre det mer komplisert som vi går langs

[Applescript] -. Erklærer Variablesset x til 5set y til 78

- Kjør hvis Statementif x < y deretter tilbake " ja " ende hvis [/Applescript]

Her jeg først erklærte to variabler og tildelt verdier til hver. Da jeg fortalte Script Editor for å gå tilbake "ja" hvis x er større enn y. Legg merke til strukturen i "hvis" statement er mye som et tell blokk. Du må avslutte alle "hvis" statement med "end hvis" eller koden vil ikke kompilere.

Du ender hver "hvis" statement med "end hvis" eller koden vil ikke kompilere.

den grunnleggende strukturen i uttalelsen er som følger: Hvis (en gitt setning) er sann, så gjør følgende. Sørg for å inkludere uttalelsen som skal testes, og "da" på samme linje som "hvis".

Deretter plasserer instruksjonene på neste linje (e) før du avslutter blokken. Hvis du kompilere og kjøre uttalelsen ovenfor, bør Script Editor tilbake "ja", noe som indikerer at x er faktisk mindre enn y. Hvis x var større enn y, ingenting ville skje fordi vi ikke har programmert for at beredskap. La oss prøve noe litt mer komplisert

[Applescript] - Erklærer Variablesset x til 78set y til 5

- Kjør hvis Statementif x <.; y deretter tilbake " ja " annet retur " Nei " ende hvis [/Applescript]

Her har vi tatt en "annet" statement som forteller Script Editor hva du skal gjøre hvis den opprinnelige betinget utsagn er usant. Strukturen er som følger: Hvis (en gitt setning) er sann, utfører handlingen en, ellers utføre handlingen b

Dette er nok for mange situasjoner, men vi har fortsatt ikke skapt en beredskap for vår tredje. situasjon: x = y. ". Else if" For å oppnå dette vil vi bruke

[Applescript] - Erklærer Variablesset x til 5set y til 5

- Kjør hvis Statementif x < y deretter tilbake " x er mindre enn y " else if x > y deretter tilbake " x er større enn y " annet retur " x er lik y " slutten hvis [/Applescript]

Her har vi tillatt for alle de tre ulike scenarier. Kjører dette skriptet skal returnere "x er lik y." Legg merke til den siste scenariet bare krever en "annet" i stedet for en "annet hvis." Dette er fordi hvis de to første påstandene er falske, må det være slik at x = y (sperring noen innspill feil).

Booleans

Tildele en sannhet verdi til en variabel er enkelt. Bare sette variabelen til true eller false

[Applescript] satt theBoolean til false

Hvis theBoolean = sant da returnere ". Det er sant "! Ellers retur " Det er bare ikke sant " end if [/Applescript]

For nå bare vet at det er så enkelt. Vi får se en mer praktisk bruk i det siste eksempelet.

Viser en dialogboks

Applescript gjør det super enkelt å vise utdata til en bruker. Bare skriv følgende:

[Applescript] display dialog " Greetings " [/Applescript]

Dette bør gi en enkel vindu som viser din hilsen og to knapper: "Avbryt" og " OK. " Det er også mulig å tilpasse disse knappene med følgende kode:?

[Applescript] dialog " skjerm, How are you " knapper {" store ", " Fryktelig ", "! Ingen av virksomheten din "} standardknapp 3 [/Applescript]

Det er tre deler til denne koden. Den første delen viser en dialogboks med teksten "Hvor er du?" Den andre delen bestemmer hvor mange knapper dialogen vil ha og hva de vil si. I dette tilfellet har vi tre knapper. Legg merke til sett med knapper må være innkapslet i parentes, og hver knapp innkapslet i anførselstegn.

Legg merke til sett med knapper må være innkapslet i parentes, og hver knapp innkapslet i anførselstegn.
Dialog

Til slutt forteller den tredje delen i dialogboksen hva standardknappen skal være. Angi standard-knappen for å 3 høydepunkter den tredje knappen når dialogboksen vises.

Å ha en dialog med flere knapper er flott, men det er ikke bra med mindre du vet hvordan du bruker innspill mottatt fra brukeren som resultat. La oss ta det vi nettopp har lært om dialoger og kombinere det med en "if, else" statement å se hvordan vi kan bruke dialoger for å bære på en ... vel ... dialog

[Applescript]. - Lag en dialog med tre buttonsdisplay dialog " Hvordan er du " knapper {" store ", " Fryktelig ", " Ingen av virksomheten din "!} standardknapp en

- Hvis brukeren er greatif resultat = {knapp fant: " store "} deretter skjerm dialogboksen " Utmerket, bære på god sir "

- Hvis brukeren er Horribleelse hvis resultat = {knapp fant: " Fryktelig "}! deretter vise dialogboksen " Du trenger å muntre opp "

- Hvis brukeren er en jerkelse skjerm dialog " Unnskyld meg pal " ende hvis [/Applescript]

Som du kan se, den første kodelinje er tatt direkte fra eksempelet ovenfor!. Den neste delen bruker en "if, else" statement å håndtere hver knappetrykk. Syntaksen er i hovedsak. Hvis brukeren trykker på knappen x, og deretter gjøre handlingen en, ellers hvis brukeren trykker knappen y, så gjør handling b, andre gjøre handlingen c

Hvis brukeren trykker på knappen x, og deretter gjøre handling a, annet hvis brukeren trykker knappen y, så gjør handling b, andre gjøre handlingen c.

Motta Text Input fra en bruker:

Noen ganger kan en enkel knapp er ikke nok. Jeg ofte skrive skript som krever at brukeren å legge inn tekst. . For å oppnå dette bruker vi en dialogboks som ovenfor, med en litt annen syntaks

[Applescript] - Display Dialog og få Inputdisplay dialogen " Hvordan er du "? Standardsvaret " Fortell meg hvordan du føler "

- Få Svar & Returner Commentset TheAnswer til (tekst returnert av resultat) display dialog " Jeg er glad du føler deg så " &Amp; TheAnswer [/Applescript]

Ved å sette en "standard svar" i koden vår, forteller vi AppeScript at vi vil at brukeren skal skrive inn tekst i svar. Vi satt en variabel til tekst returnert av brukeren. Da kan vi bruke den variabelen hvor vi ønsker å bruke inngangs
Motta Text Input fra en bruker
Behandlingsfeil:. Den Prøv Block

Å la brukere legge inn data er farlig. Hvis du er ute etter en meget bestemt svar eller type data du kan være sikker på at brukerne vil skru den opp og forårsake en feil.

Hvis du er ute etter en meget bestemt svar eller type data du kan være enkelte brukerne vil skru den opp og forårsake en feil.

på grunn av dette, må du filtrere hva som kommer inn fra brukeren å sikre at det er akkurat den type innspill du ønsker. For dette, vil vi bruke en prøve blokk og et par "hvis" uttalelser

[Applescript] - Display Dialog og få Inputdisplay dialogen ". Velg et tall 1-10 " Standardsvaret " bare taste inn tall Mindre enn 11 "

- Test For Ugyldig Characterstry satt TheAnswer til (tekst returnert av resultat) som dialog " numberon feilvisning;! Invalid Input " returnend prøve

- Test for Riktig Numbersif TheAnswer < 1 da satt theTest å 0else hvis TheAnswer < 11 da satt theTest å 1else satt theTest å 0end hvis

- Gå Kommentarer til userif theTest = 0 deretter vise dialogboksen " Invalid Input " annet skjermdialogen " Du valgte nummer " &Amp; theAnswerend hvis [/Applescript]

Koden ovenfor er komplisert, så la oss bryte det ned. Den første delen viser bare en dialogboks og ber brukeren om å velge et nummer. Men vi bare vil godta tallene en gjennom ti. Hvis ikke annet er angitt, ønsker vi å fortelle brukeren input var ugyldig.

Den andre delen er hvor vi teste for å se om noen ikke-tallene ble oppgitt som bokstaver eller symboler. En prøve blokken tillater oss å fortelle Applescript for å forsøke å utføre koden og se hva som skjer.

En prøve blokken tillater oss å fortelle Applescript for å forsøke å utføre koden og se hva som skjer.

her har vi fortalt Applescript til å prøve å ta teksten returneres av brukeren, og gjøre den om til et tall. Hvis det var ingen prøve blokk og vi utført denne kommandoen, vil det kaste en feil, og avslutte programmet hvis brukeren skrev inn en bokstav eller symbol.

Men forsøk blokken tillater oss å gi Apple en spesiell kommando hvis en feil er kastet. I dette tilfellet viser vi en "Invalid Input" dialogen hvis en feil blir kastet. Vi deretter kommandoen manuset til slutt ved å skrive "return". Legg merke til en prøve blokken må slutte med "end prøve" -kommandoen.

Når du programmerer, må du alltid vurdere alle mulige feil som brukerne kan lage og skape en beredskap for det. Prøv å kjøre koden ovenfor og skrive inn noen ugyldige tegn. Du kan se at uansett hva du skriver, manuset kun godtar tallene 1-10.

Når du programmerer, må du alltid vurdere alle mulige feil som brukerne kan lage og skape en beredskap for det.

handlers

på samme måte som variabler lagre mye informasjon i en liten kodebit, handlere (ofte kalt funksjoner i andre programmeringsspråk) er en fin måte å gjentatte ganger utføre et stort antall kommandoer med svært lite kode.

Ved å lagre flere kommandoer i en tekstutdrag, sparer du deg selv mye programmering og forenkle koden din. Her er et eksempel:

[Applescript] - Definer Handleron additionHandler (theVariable) satt x til fem sett y til fem sett z til x + y + theVariable skjerm dialogen " 10 + " &Amp; theVariable & &Quot; = &Quot; &Amp; Zend additionHandler

- Kjør HandleradditionHandler (8)

- Kjør Handler Againset theNumber å 145additionHandler (theNumber) [/Applescript]

Syntaksen for å definere et behandlingsprogram er: på handlerName (variabel), etterfulgt av kommandoer for å utføre, etterfulgt av "end handlerName."

den variable i parentes (theVariable) er den delen som vi må definere hver gang vi kjører behandleren. Den første delen av koden i seg selv vil ikke gjøre noe fordi vi ennå ikke har kjørt handler, bare definert det.

Legg merke til når vi kjører behandleren vi skriver behandleren navn etterfulgt av et tall i parentes. Den handler vil nå ta dette nummeret og sette det inn noe sted vi har skrevet "theVariable" i vår handler definisjon.

I dette tilfellet vil det sette den valgte variabelen til z og legge den til x (5) og y (5) og vise en dialog med svaret. Så additionHandler (8) setter z til 8 og deretter legger 10 (5 + 5) og gir oss et resultat av 18. Når vi kjører handler igjen, den samme koden kjøres på et annet nummer.

I gjorde dette for å vise deg at du kan definere en variabel andre steder og sette det inn i behandlingsprogram. Her har vi satt theNumber til 145 og deretter kjøre føreren på theNumber.

Legg merke til at noen variabler som er definert inne i et behandlingsprogram ikke eksisterer utenfor behandleren. Så hvis du endte dette skriptet med "return z" vil du få en feilmelding som forteller deg at "z" er ikke definert.

Sørg for å gi alle variablene beskrivende og unike navn.

Dette betyr at du kan teknisk
bruke identiske variabelnavn for variabler definert innsiden og utsiden av et behandlingsprogram. Imidlertid gjør dette for rotete og forvirrende kode og bør unngås. Bare sørg for å gi alle variablene beskrivende og unike navn.

Gjenta Blocks

Det er ofte slik at du finner behov for å opprette et skritt i skriptet som gjentar et gitt antall ganger.

i Apple vi oppnå looper med gjentatte blokker.

Mange programmeringsspråk kaller dette en loop. I Apple utrette vi looper med gjenta blokker. Gjenta blokkene er ganske enkel og allsidig, her er et enkelt eksempel:

[Applescript] satt theNumber til 5

gjenta theNumber ganger vise dialogboksen " Er ikke dette irriterende " slutten gjenta [? ,,,0],/Applescript]

Her har vi laget en dialogboks, og sett den til å gjenta fem ganger på rad. Dette eksempelet, men ubrukelig, viser deg hvor enkelt det er å lage gjenta trinn.

Men du vet ikke alltid hvor mange ganger du vil ha en gitt skritt å gjenta. Det er ofte nødvendig å gjenta et trinn eller serie av trinn mens en viss tilstand er fortsatt til stede. For disse tilfellene bruker vi en "repeat mens" block

[Applescript] satt theNumber til en

repeat while (theNumber < 2). Dialogboksen " display; Play Again " knapper {" Ja ", " Nei "} standardknapp 1, hvis resultatet =! {knapp fant: " Ja "} deretter vise dialogboksen " Vennligst sett flere kvartaler " knapper {" OK "} standardknapp 1

annet skjermdialogen "! Farvel " standardknapp to sett theNumber til (theNumber + 1) ende hvis

end gjenta [/Applescript]

Her vi har setup dialogen som gjentar mens theNumber er mindre enn 2. Hvis brukeren sier de ønsker å spille igjen, er de gitt en melding for å sette inn flere kvartaler og dialog gjentas.

så lenge brukeren holder trykket ja, holder dialogen gjenta. Når brukeren velger "Nei", vi legger en til theNumber, sette verdien til to. Skriptet ser at sannheten krav har blitt feilaktig og opphører å gjenta handlingen.

Putting It All Together

I stedet for å forlate deg med flere biter av usammenhengende kode, tenkte jeg det ville være best å gi en siste eksempel å integrere alt vi har lært ovenfor. La oss ta "plukke et tall" eksempelet ovenfor og kjøtt den ut til en fullt fungerende script

[Applescript] -. Sett Random Numberset randomNumber til tilfeldig tall fra 1 til 10

- boolsk å teste om Script bør være Repeatedset repeatTest til sann

- Hvis resultatet er et nummer, Bytt til sann og se om nummeret er mellom 1 og 10Angi testNumbers til falsk

- Hvis resultat Passes Alle tidligere tester, det er riktig satt winningTest til false

- Tell Antall Guessesset tryCount til 0

- Generisk Dialog Handleron DialogBox (theMessage) display dialog theMessageend DialogBox

- Gjenta hvis noen tester Er Failedrepeat stund (repeatTest = true) --Display Dialog & Få Resultat skjerm dialogen " Velg en rekke 1-10 " Standardsvaret " Skriv inn bare tall 1-10 " standardknapp 2

settes TheAnswer til (tekst returnert av resultat)

- Er Resultat et nummer? prøve satt TheAnswer å TheAnswer som nummer satt testNumbers til sann på feil DialogBox (" Invalid Input ") end prøve

- Er resultatet mellom 1 og 10? if (testNumbers = true) så --Test for riktige tall hvis TheAnswer < 1 da DialogBox (" Invalid Input ") else if TheAnswer < 11 da satt repeatTest til false sett winningTest å true andre DialogBox (" Invalid Input ") ende hvis slutten hvis

- Er Resultat det riktige svaret? hvis winningTest = sant da hvis TheAnswer = randomNumber deretter DialogBox (" du gjettet det i " & tryCount & "! forsøker ") ellers DialogBox (" Prøv igjen ") satt repeatTest til sann sett tryCount til tryCount + en slutt hvis slutten hvis

end gjenta [/Applescript]

Ved første øyekast dette skriptet kan virke skremmende. Men hvis du har gått gjennom alle eksemplene ovenfor, det bør alle gjøre perfekt forstand

Trinn 1:. Erklærer variablene

Først erklærer vi våre variabler, for det meste boolean på dette punkt. Deretter oppretter vi et behandlingsprogram (dialogboks) for å vise våre ulike dialoger hele manuset. Brukeren blir deretter bedt om å velge et tall mellom 1 og 10. Svaret blir deretter kjørt gjennom tre separate tester

Trinn 2:. Sjekk Input

Deretter tester vi for å se om innspill inneholder bokstaver eller symboler. Deretter tester vi for å se om antall returnert av brukeren er i målområdet (1-10)

Trinn 3:. Har Input Match Random Number

Til slutt tester vi? for å se om brukerens gjetning matcher tilfeldige tall generert av scriptet.

ved hjelp booleans og hvis uttalelser manuset er strukturert slik at hver påfølgende test er bare kjøre hvis inngangen passerer forrige test. Hvis noen test returnerer false begynner gjenta blokken igjen, og følgende tiltak er ikke kjørt.

Nesting

Legg merke til at det er faktisk mulig å reir hvis uttalelser innen hvis uttalelser. Dette gjelder gjenta blokker og fortelle blokker også. Vær forsiktig med å bruke nestede uttalelser overdrevet. Ett eller to lag dyp er ikke dårlig, men noe utover det bare blir rotete og vanskelig å følge.

Kjøre dette skriptet skal la deg velge et nummer og fortsette å gjette til du får det riktig. Leke med den et par ganger og se hvor mange gjetninger det tar deg å få det riktig!

Konklusjon

Denne artikkelen har vandret du gjennom å bruke hvis uttalelser, booleans, dialogbokser, brukerundersøkelser, handlers, feil handlere og gjenta blokker.

Du skal nå være rustet til å skape noen alvorlig fancy skript som vil automatisere de tøffeste av arbeidsflyter. Bare bokmerke denne siden og bruke den som en jukselapp for alle dine fremtidige skript.

Som nevnt ovenfor, er dette den tredje utgaven i min serie på automatisering. Din tilbakemelding er svært viktig i å avgjøre hva jeg skriver om så gi meg beskjed hvis du vil at jeg skal holde dem kommer. Hvis etterspørselen er stor nok, vil jeg gjerne skrive mer!