We gaan verder in onze doorlopende reeks AppleScript-artikelen, vandaag gaan we meer leren over de kracht van herhalingslussen, wat u vele inspanningen kan besparen door herhaalde taken en groepen opdrachten te automatiseren. Nadat u leert om herhalingen te gebruiken, kunt u de hoeveelheid werk die nodig is om taken te automatiseren aanzienlijk verminderen, wat zich vertaalt in snellere, eenvoudigere codering en hogere productiviteit.
Voordat we beginnen met het leren van herhalingslussen, moet je eerst enkele van onze eerdere AppleScript-handleidingen bekijken.
Als je het de eerste keer goed deed, is het niet één keer genoeg?
Als je ooit eerder hebt geprogrammeerd of scripte, dan weet je dat loops absoluut essentieel zijn om bijna elke belangrijke prestatie te leveren. Als je echter nog niet bekend bent met het programmeerwerk, vraag je je misschien af waarom je ooit iets zou willen herhalen. Als je het de eerste keer goed deed, is het niet één keer genoeg?
Het antwoord ligt natuurlijk in het feit dat we vaak met enorme hoeveelheden gegevens werken. Als u vijfhonderd afbeeldingen in een map hebt en er iets van wilt doen, kunt u vijf keer hetzelfde commando typen, elke keer op een ander bestand richten of een herhaallus gebruiken en uw geestelijke gezondheid.
Als je mijn vorige artikel over voorwaardelijke uitspraken leest, moet de structuur van een herhalingslus bekend zijn. Net als bij veel andere AppleScript-constructies vormt de herhalingslus een blok code met een begin en een einde.
[Applescript]
herhaal 3 keer
--commando's om te herhalen
einde herhalen
[/ Applescript]
Zoals u kunt zien, begint de eerste regel met "herhalen" en schetst dan de voorwaarden van de herhaling. In het middelste gedeelte worden alle verschillende opdrachten die moeten worden herhaald geplaatst en laat de laatste regel de compiler weten dat dit is waar de lus eindigt.
Het bovenstaande codevoorbeeld is redelijk eenvoudig dankzij de hoge leesbaarheid van AppleScript. Alles in dit herhalingsblok wordt drie keer herhaald, waarna het script verder gaat (tenzij er een beëindigingsactie is in de herhaling).
Een ding dat je in je achterhoofd wilt houden, is dat je code zo geschreven moet worden dat herhaling ervan daadwerkelijk iets nuttigs doet. Het is vaak zo dat een bepaald codegedeelte hetzelfde is, of je het nu een of duizend keer uitvoert. Het is aan jou om het zo te vormen dat de herhaling vooruitgang veroorzaakt. We zullen zien hoe dit te doen als we meer te weten komen over de verschillende soorten herhalingen die beschikbaar zijn.
In een vorig artikel hebben we gesproken over hoe u uw kunt variëren als uitspraken aanzienlijk door verschillende combinaties van als, anders en anders als. Herhaalde loops kunnen een nog hoger niveau van variatie bereiken, omdat er in AppleScript eigenlijk heel veel verschillende soorten herhalingslussen zijn. Laten we erover gaan en hoe het werkt.
Het eerste type herhaling is een oneindige lus. Dit gebeurt als we eenvoudigweg een herhalingsblok gebruiken zonder enige vorm van wijziging.
[Applescript]
zet x op "monotonie"
herhaling
weergave dialoog x
einde herhalen
[/ Applescript]
Als u dit script uitvoert, zal het voor altijd verdwijnen en wordt er telkens een dialoogvenster weergegeven als het wordt uitgevoerd. Er zijn maar weinig praktische gevallen waarin u een oneindige herhaling wilt, dus zorg er als algemene regel voor dat u altijd extra code toevoegt aan die herhaalde instructie die de duur of telling van de herhaling regelt.
Het volgende type herhaling werd getoond in ons eerste codevoorbeeld hierboven. Dit is waar we specifiek aangeven hoe vaak we een stuk code willen herhalen. Hier is een voorbeeld:
[Applescript]
herhaal 2 keer
weergavedialoog "Hallo daar!"
einde herhalen
[/ Applescript]
In deze code roepen we een dialoogvenster op met een eenvoudig bericht. Het herhaalblok is ingesteld om dit tweemaal uit te voeren, dus zodra de gebruiker op een van de knoppen in het eerste dialoogvenster klikt, verschijnt er een ander op zijn plaats.
Zoals ik hierboven al zei, is het meestal niet zo nuttig om exact hetzelfde te herhalen als dit. Wat we in plaats daarvan moeten doen is een manier vinden om de uitvoer te variëren. Laten we kijken of we het herhalingsblok twee keer kunnen uitvoeren, maar elke keer een ander bericht weergeven.
[Applescript]
zet theMessages op "Hallo daar!", "Laten we leren over AppleScript!"
stel x in op 1
herhaal 2 keer
weergavedialoog (item x van de berichten)
stel x in op (x + 1)
einde herhalen
[/ Applescript]
Dit lijkt misschien een beetje verwarrend, maar maak je geen zorgen, het is heel eenvoudig. We beginnen met het declareren van een lijst. Met een lijst kunt u meerdere stukjes gegevens in één variabele omzetten. Hier hebben we twee verschillende reeksen genomen en in "theMessages" gegooid. We hebben toegang tot elk lijstitem op basis van zijn nummer. Dus "Hallo daar!" is "item 1 van de berichten
"en" Laten we leren over AppleScript! "is"item 2 van de berichten
".
Vervolgens maken we gebruik van een uiterst belangrijke constructie: een teller. Dit is het geheim om een herhaling iets anders te laten doen elke keer dat het wordt uitgevoerd. Voor dit voorbeeld stellen we in X om 1 te evenaren, dan namen we toe X aan het einde van de herhaling. Op deze manier, elke keer dat de herhaling wordt uitgevoerd, de waarde van X neemt toe met één.
Het effect dat dit heeft op onze code is diepgaand. De eerste keer dat de herhaling wordt uitgevoerd, X is gelijk aan 1, dus item 1 van onze lijst wordt geopend en ons eerste bericht wordt weergegeven in het dialoogvenster. Dan is de waarde van X in verhoogd tot twee, waardoor het tweede bericht de tweede keer door de herhaling wordt weergegeven.
Tip: Merk op dat we een cijfer (2) in een specifieke herhaling moeten gebruiken, spelling uit om iets te herhalen "twee keer" zal niet werken.
Als je iets via een oplopende variabele wilt doorlopen, is er een meer beknopte manier om dit te doen dan wat we in ons vorige voorbeeld zagen. De ... gebruiken herhaal met construct, we zetten een teller op die direct in onze loop is gebouwd en toegankelijk is vanuit de code in ons. Laten we eens kijken hoe dit eruit ziet door het vorige codevoorbeeld aan te passen:
[Applescript]
zet theMessages op "Hallo daar!", "Hoe gaat het met je?", "Laten we leren over AppleScript!"
herhaal met n van 1 tot 3
weergavedialoog (item n van de berichten)
einde herhalen
[/ Applescript]
Zoals u kunt zien, hebben we deze keer drie boodschappen om doorheen te bladeren. Merk op dat onze code echter wel is vereenvoudigd. We hebben het maken en ophogen van een variabele verwijderd en in plaats daarvan het herhalingsblok verteld om "te herhalen met n van 1 tot 3".
Wat dit doet is een variabele maken n, verhoog het dan met één telkens als het blok zich herhaalt. De begin- en eindnummers worden bepaald door het gedeelte "van 1 tot 3". Dus de eerste keer dat dit wordt uitgevoerd, n zal gelijk zijn aan 1, dan 2 de volgende keer, en uiteindelijk 3 de laatste keer.
Snelle en eenvoudige toegang tot de telvariabele maakt herhaal met een uiterst nuttige herhalingsstructuur. Je zult merken dat je dit vaak gebruikt.
Er is nog een andere vorm van a herhaal met blokkeren dat sloten de nummers en in plaats daarvan is specifiek gestructureerd om door de items in een lijst te bladeren. Dit is precies wat we hebben geprobeerd te bereiken, dus dit is perfect voor ons voorbeeld. Dit is ons herhalingsblok, opnieuw vereenvoudigd.
[Applescript]
zet theMessages op "Hallo daar!", "Hoe gaat het met je?", "Laten we leren over AppleScript!"
herhaal met bericht in theMessages
dialoogbericht weergeven
einde herhalen
[/ Applescript]
Deze keer vertellen we AppleScript om het codeblok te herhalen met de bericht variabele in de lijst De berichten. Dit betekent dat het codeblok één keer wordt uitgevoerd voor elk item in onze lijst. In dit geval zal het dus drie keer worden uitgevoerd. Elke keer dat het wordt uitgevoerd, wordt de inhoud van het huidige lijstitem in onze bericht variabele, die we later in onze opdracht voor display-dialoog gebruiken.
De volgende herhalingslus die u kunt gebruiken in uw code is herhaal terwijl. Deze is gemakkelijk te begrijpen maar nog steeds super krachtig. In principe kun je een bepaald codeblok tijdens een gegeven herhalen boolean is waar. Hier is een eenvoudig voorbeeld dat niet veel doet, maar het illustreert het punt:
[Applescript]
stel x in op true
zet y op 0
herhaal terwijl x
als y> 10 dan
zet x op false
anders
stel y in op y + 1
stop als
einde herhalen
[/ Applescript]
In dit script wordt het codeblok oneindig herhaald zolang als X is waar. Binnen de herhaling stellen we echter in X naar false if Y is groter dan 10 en verhoog het anders. Dit betekent dat de code maar een paar keer kan worden herhaald, omdat uiteindelijk Y gaat naar 10 en dan stopt de herhaling.
Merk op dat ik deze structuur ook had kunnen gebruiken:
[Applescript]
herhaal terwijl x waar is
--code om te herhalen
einde herhalen
[/ Applescript]
Deze code werkt prima, maar het 'is waar' is niet nodig. De reden hiervoor is de kern van precies wat een boolean is en wat het doet. De variabele X in ons voorbeeld is gelijk waar, de twee zijn een en dezelfde.
Als u dit nu op zijn kop wilt zetten, kunt u iets herhalen totdat uw boolean waar wordt. Dit werkt als volgt:
[Applescript]
herhaal terwijl x fout is
--code om te herhalen
einde herhalen
[/ Applescript]
Dit lijkt allemaal een beetje abstract, dus laten we iets interessants doen met een herhaal terwijl lus. We zullen een spel met basisgetallen raden. Eerst stellen we de antwoordvariabele in op een willekeurig getal en onze variabel op 0. Vervolgens maken we een herhaal terwijl lus die blijft lopen zolang de schatting van de gebruiker niet gelijk is aan het willekeurig geselecteerde antwoord.
Binnen de herhaling geven we een dialoogvenster weer en stellen we het nummer in dat wordt teruggegeven aan de schattingsvariabele. Dit venster voor het invoeren van schattingen blijft bestaan totdat de gok correct is.
[Applescript]
stel een antwoord in op een willekeurig getal van 1 tot 5
zet gok op 0
herhalen terwijl gokken niet gelijk is aan antwoord
stel gissing in voor tekst teruggestuurd van (weergavedialoogvenster "Guess again! Kies een nummer van 1 tot 5" standaardantwoord "1") als nummer
einde herhalen
weergavedialoogvenster "Dat klopt!" & antwoord & "is het antwoord!"
[/ Applescript]
De code "herhalen terwijl gokken niet gelijk is aan antwoord" is niet erg gemakkelijk te lezen. Het negatieve (niet gelijk aan) maakt het verwarrend. We kunnen dit een beetje vereenvoudigen als we de herhaal terwijl loop en in plaats daarvan naar a kijken herhaal tot lus. Hier is het aantal geraden spellen herschreven:
[Applescript]
stel een antwoord in op een willekeurig getal van 1 tot 5
zet gok op 0
herhaal tot (guess = antwoord)
stel gissing in voor tekst teruggestuurd van (weergavedialoogvenster "Guess again! Kies een nummer van 1 tot 5" standaardantwoord "1") als nummer
einde herhalen
weergavedialoogvenster "Dat klopt!" & antwoord & "is het antwoord!"
[/ Applescript]
Zoals u kunt zien, is deze herhaling veel beknopter en gemakkelijker te lezen. Houd er rekening mee dat dit niet altijd het geval zal zijn, soms een herhaal terwijl zal degene zijn die je code bewaart.
Oef! Er zijn ontzettend veel verschillende soorten herhalingslussen die er niet zijn? Als je je overweldigd voelt, wees dat dan niet. Ze zijn allemaal vrij eenvoudig en je zult er versteld van staan hoe vaak de juiste bewoording het eerste is dat je in je hoofd krijgt. Om u op het goede spoor te houden, volgt hier een korte lijst met enkele verschillende herhalingsvoorbeelden:
Schrijf bij het schrijven van een herhalingslus altijd een paar andere structuren in je hoofd om te zien of je het korter en beknopter kunt maken. Zoals we hierboven hebben gezien, kunt u uw code echt verbeteren door open te blijven voor het gebruik van verschillende constructies.
U zou nu een expert moeten zijn op het gebied van AppleScript-herhalingslussen. Door deze in combinatie met te gebruiken als verklaringen, die we eerder hebben geleerd, zul je ongelofelijk complexe en nuttige scripts kunnen maken.
In feite zal ons volgende AppleScript-artikel een pauze nemen van de theorie en een deel van deze kennis gebruiken met een praktisch script dat je meteen op je systeem kunt implementeren. Kom snel terug!