Apple Script - opakování akcí (pokračování) - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Odkud pochází fotografka Anne Erhard?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



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):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

Poslat článek

Nyní máte možnost poslat odkaz článku svým přátelům:

Váš e-mail:

(Není povinný)

E-mail adresáta:

Odkaz článku:

Vzkaz:

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: