Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Software
Apple Script - opakování akcí (pokračování)
12. září 2006, 00.00 | Dnes nás čeká pokračování repeatů. Představíme si jejich další varianty, a povíme si jak používat flagy a k čemu jsou dobré. Vše funguje stejně, jak jsme si minule ukázali, pouze s obměnou podmínek pro opakování. A jaké to jsou?
Začněme variantou repeat while. V tomto případě je stanovena podmínka a vše je opakováno dokud trvá. Nejlépe si to zase ukážeme na příkladu, upravte řádek repeatu takto:
repeat while opacko is less than or equal to (count of Dny)
V tomto případě je repeat prováděn stále dokola, ale to za předpokladu, že opacko je menší nebo rovno součtu seznamu dnů. Ve chvíli, kdy jeho hodnota převýší součet dnů v seznamu, repeat končí. Zde si ale musíme dát pozor a zajistit, aby se proměnná opacko při každém repeatu zvýšila, v opačném případě by jsme se dostali do nekonečné smyčky. Proto si na to raději dávejte pozor a v případě že to půjde, připravte si i nouzový exit repeat. Kdybyste ale přece jenom zatoužili po nekonečné smyčce, dejte raději přednost té v Cupertinu.
Jedním ze způsobů jak využít repeaty je použít tzv. flagy. Flag je v podstatě proměnná, kterou nadefinujeme na true a uvnitř repeatu jí v případě, že ho chceme ukončit změníme na false. Změňte celý skript takto:
set Dny to {"Monday", "Tuesday", "Wensday", "Thurseday", ¬ "Friday", "Saturday", "Sunday"} set dnes to (weekday of (current date)) as string set opacko to 1 set repeatflag to true repeat while repeatflag if dnes is equal to item opacko of Dny then display dialog "Tody is " & item opacko of Dny & "!" set repeatflag to false end if set opacko to opacko + 1 end repeat display dialog "repeat goes " & opacko & " times."
Před začátkem repeatu jsme přidali nadefinování proměnné repeatflag a repeat probíhá dokud bude tato proměnná true. Ve chvíli kdy ale nalezneme shodný den, změníme ji na false, a repeat končí. Zase musím podotknout, že pokud by se ani jeden ze dnů neshodoval se seznamem, nebo jsme zapomněli změnit repeatflag, nastává Infinite loop. Použití repeat until je téměř totožné s repeat while, je pouze jeho opakem a trvá dokud je výsledkem false a končí v případě, že podmínka byla splněna, tedy že výsledkem je true. Tyto dva repeaty se používají poměrně často a je jen na vás, jaký si oblíbíte a jaký se vám bude hodit. Jen se ještě zmíním, že spousta lidí si oblíbí pouze jednu variantu a v případě, že potřebují opak, pouze zinvertují proměnnou. Toho docílíte jednoduše dopsáním slova not před proměnnou. Napíšeme-li tedy "repeat while not true" je to stejné jako "repeat until true". Slovíčkem not můžeme invertovat jak čísla, booleany ale i seznamy.
Posledním z rodiny repeatů je repeat with. Ten je určen pro práci se seznamy, na které se podrobně zaměříme v nějakém příštím díle. Dnes si ale ukážeme jak takový seznam nejjednodušeji zpracovat repeatem, aby každá položka přišla na řadu. Využijeme k tomu proměnnou, do které postupně uložíme jednotlivé položky seznamu a provedeme s nimi jednotlivé operace dokud není repeat stopnut, nebo dokud nedojde na konec seznamu. Naposled upravte náš skript takto:
set Dny to {"Monday", "Tuesday", "Wensday", "Thurseday", ¬ "Friday", "Saturday", "Sunday"} set dnes to (weekday of (current date)) as string set opacko to 1 repeat with jedenDen in Dny if dnes is equal to (jedenDen as string) then display dialog "Tody is " & item opacko of Dny & "!" exit repeat end if set opacko to opacko + 1 end repeat display dialog "repeat goes " & opacko & " times."
Co se změnilo? Zmizel flag, ale přibyla proměnná jedenDen. Repeat tedy bere jeden den po druhém a ukládá je do proměnné, která je porovnána s dnešním dnem. Počet opakování je limitován položkami v seznamu, nemusíme se proto obávat jeho zacyklení. Je zde zase použit exit repeat a to pro zrychlení programu. Potřebujeme-li najít pouze jednu věc, je zbytečné aby repeat pokračoval i v případě, že jsme našli, co jsme hledali. To je velmi šikovné a ve složitých programech už je každá operace navíc znát, proto se naučte omezit co nejvíce zbytečných operací. Vaše programy pak budou svižnější a plynulejší.
Doufám, že jsem vám moc nezamotal hlavu a že princip opakování chápete. Tři nejdůležitější příkazy tedy už umíme, zbývá jen tell, ke kterému se dostaneme, až začneme pracovat se soubory a s aplikacemi. Do té doby si ale ještě musíme ukázat seznamy a několik dalších věci. To je tedy k repeatům vše, ale setkáme se s nimi ještě mnohokrát, protože opakování je matka moudrosti.
Obsah seriálu (více o seriálu):
- AppleScript - úvod
- AppleScript - Script Editor
- AppleScript - Proměné
- AppleScript - Třídy
- AppleScript - matematika a počítání
- AppleScript - rozhodování
- AppleScript - práce s daty
- AppleScript - slovníky
- Apple Script - rozhodování
- Apple Script - opakování akcí
- Apple Script - opakování akcí (pokračování)
- Apple Script - Text
- Apple Script - elementy Stringu
- Apple Script - elementy Stringu II.
- AppleScript - seznamy
- AppleScript - seznamy II.