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
AppleScript - matematika a počítání
21. června 2006, 00.00 | V tomto díle se zaměříme na matematiku a počítání v AppleScriptu, naučíme se také čísla zaokrouhlovat a vysvětlíme si pravidla podle kterých se to dělá. Řekneme si také ještě něco málo k proměnným a jako bonus naučíme náš program vydávat zvuky.
Než se dáme do počítání, zaskočme ještě na chvíli k proměnným. Minule jsem se zmiňoval o proměnné result a o jejích výhodách a záporech. Dnes bych rád pohovořil o mém způsobu práce s výsledky. Jak už jsem psal, result je proměnná obsahující výsledek poslední provedené operace Tento způsob mě ale začal po nějaké době zlobit a se složitostí programů přibyly i chyby, kdy result obsahoval úplně něco jiného, než jsem předpokládal. Tento problém jsem vyřešil jednoduše, každou operaci, u které chci znát výsledek, uložím do proměnné, která se nemění a já s ní mohu pracovat, kdykoli si později vzpomenu. Tento způsob, kdy po každé operaci result přeuložím do proměnné, je ale trochu těžkopádný a zdlouhavý, existuje ale ještě jednodušší způsob. Tím je možnost přesunout definování proměnné na začátek celého příkazu. Řekneme-li tedy, že do proměnné vložíme celý příkaz, vložíme do ní fakticky jeho výsledek. Ukážeme si to na příkladu. Do nového okna napište:
set vysledek to display dialog "Vyber si jednu barvu." buttons ("modrá", "cervená",¬ "zelená") default button 2 giving up after 10 with icon stopna další řádek:
set vypocet to 10 div 2 + 3a na další:
get button returned of vysledekTímto jsme vložili do proměnné vysledek příkaz display dialog respektive jeho výsledek. Další řádek nám ukazuje, že v tuto chvíli se můžeme věnovat čemukoli chceme a v posledním se bez problémů vracíme k výsledku prvního řádku a k tlačítku, které bylo zmáčknuto. Jedinou nevýhodou celého postupu je, že přibývají proměnné, naopak výhody jsou přehlednost a možnost vracet se k výsledkům kdykoli potřebujete. Všimněte si ještě rozšíření dialogu o ikonu. Jsou tři základní výstražné ikony a to stop, note a caution.
Tak a teď už ta slíbená matematika. V AppleScriptu můžeme vypočítat téměř cokoli, ale musíme mít na paměti několik zásad a pravidel. Nejprve si ale blíže představme všechna používaná znaménka. Pro sčítání a odčítání používáme + a –, pro násobení a dělení * a /, exponovat můžeme pomocí znaku ^, kde číslo před je číslo které chceme exponovat a za znakem ^ následuje exponent. Ekvivalentem dělícího znaménka je slovo div, o tom jsme se mohli přesvědčit v předchozím příkladu, jediným rozdílem mezi div a lomítkem je, že výsledkem je vždy integer, kdežto při použití lomítka je to real. Ještě se zmíním o znaménku mínus určující zápornou hodnotu čísla. Toto znaménko je velmi důležité v rámci priorit při výpočtech. Při sčítání a odčítání je jedno zda nejprve jedno číslo odečteme, nebo přičteme druhé, ale zapojíme-li do téhož výpočtu ještě násobení nebo dělení už záleží na tom, která operace proběhne dříve. A proto jsou v AppleScriptu všechny početní operace seřazeny podle priority, podle které jsou prováděny. Nejvyšší prioritu má právě znaménko mínus v záporných číslech, pak následuje exponování, další stupeň má dělení a násobení a poslední sčítání a odčítání. V případě stejné priority dvou operací provádí AppleScript operace postupně z leva doprava kromě exponování, kde je to opačně. Chceme-li, aby tomu bylo jinak, musíme použít závorky. Pojďme si vše ukázat na příkladech. Napište do nového okna:
set x to -3 * 5 ^ 3 + 5 * 8 ^ 3 / 5 - 37a na další řádek:
get xProgram zkompilujte a spusťte, v poli result se objeví číslice 100 a ve skriptu přibude pár závorek. Jak ale AppleScript k tomu výsledku došel? Díky předefinovaným prioritám je tento příklad pro AppleScript totéž jako kdybychom do okna napsali toto:
(((-3) * (5 ^ 3)) + (5 * (8 ^ 3) / 5) - 37)V případě, že budeme chtít nejprve nějaká čísla sečíst, musíme je uzavřít do závorek. Upravme tedy náš skript zřeba takto:
set x to-(-3 * 5) ^ 3 + 5 * (8 ^ (3 / 5 - 37))a rázem je výsledek 3375.0. V podstatě to není nic složitého, jen je nutné mít na paměti priority operací, nebo raději pro přehlednost doplňovat závorky.
Při práci s čísly také občas narazíme na potřebu je zaokrouhlit. I na tohle je v AppleScriptu myšleno, je tu od toho příkaz round. V případě, že potřebujete jen zbavit číslo desetinných míst, stačí ho převést na integer. AppleScript k tomu ale stejně interně využívá příkazu round, tak se na něj pojďme podívat. Základní tvar je round číslo(real). Můžeme ale doplnit jeden parametr zaokrouhlování. Ty si teď projděme jeden po druhém: rounding up – zaokrouhlí k nejbližšímu vyššímu integeru, rounding down – zaokrouhlí k nejbližšímu nižšímu integeru, rounding toward zero – vždy k nejbližšímu integeru směrem k nule, rounding to nearest – zaokrouhlí čísla s .5 na konci vždy k nejbližšímu sudému číslu. Toto je defaultní nastavení AppleScriptu, které je užíváno i k převodům z real na integer, nebo při použití samotného jinak nespecifikovaného round parametru. Posledním je rounding as taught in school – zde je .5 vždy zaokrouhlováno směrem od nuly. Jak který způsob funguje se podívejme na následující ukázce, výsledek je vždy doplněn na konci řádku jako poznámka. Využití jednotlivých způsobů je mnoho a je jen na vás, který si vyberete a který budete potřebovat do svého programu.
Na závěr si ještě ukážeme, jak může program vydávat zvuky. Jak už jsem uvedl, AppleScript využívá systémových možností a to i co se týká výstražných zvuků. A právě k tomu je příkaz beep, který spustí systémový výstražný zvuk. Otevřete náš program a před display dialog napište na nový řádek:
beep 2Program zkompilujte a spusťte, než se objeví dialog uslyšíte dva výstražné zvuky. Číslo za slovem beep definuje počet zvuků, není-li definováno, zvuk je pouze jeden. Teď už náš program na sebe umí dostatečně upozornit, umí se nás na něco zeptat a umí naši odpověď zaznamenat, no a příště ho naučíme se rozhodovat.
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.