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 - rozhodování
16. srpna 2006, 00.00 | V životě se mnohdy dostaneme do situace kdy se musíme rozhodnout pro jedno, nebo pro druhé. To už v AppleScriptu umíme, často se ale rozhodneme špatně, prostě zkusíme jednu možnost a když se to nepovede, je to ta druhá. A právě to se naučíme dnes naprogramovat.
Při psaní programů můžeme narazit na mnoho chyb, které způsobí špatně nadefinovaná proměnná, špatný příkaz, nebo cokoli jiného, co se snaží nám programování ztížit. Taková chyba pak zastaví průběh programu a přihlásí se o naši pozornost. Mnohdy ale chybu předpokládáme, nebo na ni dokonce čekáme a potřebujeme na ni reagovat a pokračovat v programu. K tomu slouží příkaz, který si dnes představíme. Je to příkaz try.
Příkaz try se používá stejně jako if ve víceřádkovém provedení, jako ohraničení jiných příkazů. Začínáme ho samotným příkazem try na samostatném řádku a končíme end try také na samostatném řádku. Vše obsažené v tomto bloku je normálně provedeno, tedy pouze do chvíle, dokud nenastane chyba. V takovém případě je vše co následuje za chybou vynecháno a program pokračuje za try blokem. Nejlépe si to ukážeme na příkladu. Napište do nového okna:
display dialog "napis cislo" default answer 0 try set vysledek to text returned of result as integer display dialog "Tve cislo je: " & vysledek end try beep 2
Program zkompilujte a spusťte. Nejdříve napište nějaké číslo, které vám program ukáže jako vaše číslo a vše zakončí dvojitým pípnutím. Napište ale místo čísla text a uslyšíte už jen pípnutí. V prvním případě je text returned bez problémů převeden na integer a proto nám to program i sdělí dialogem a nakonec vydá dva zvuky, které následují za try blokem. Ve druhém případě ale první příkaz za try způsobí error, který ale náš program nezastaví, ale pouze vynechá dialog sdělující nám naše číslo a vše zakončí dvojitým pípnutím které není v try bloku a není tedy vynecháno. Jen tak pro zajímavost, když vyhodíte try a end try a napíšete místo čísla text, program skončí errorem aniž by vydal nějaké zvuky.
Co ale dělat v případě že právě když nastane chyba potřebujeme aby se něco stalo? Můžeme na začátku definovat nějakou proměnnou např. trystatus jako false a na konci, pokud vše proběhlo bez problémů, přepíšeme proměnnou na true a po skončeni try bloku se jednoduše ifem zeptáme zda je trystatus true a vše je v pořádku, nebo nastala nějaká chyba a my na ní patřičně reagujeme. Tento způsob je ale na AppleScript složitý a proto na to máme v AppleScriptu jednoduchý příkaz, respektive rozšíření try příkazu. Je to on error, kterým z try vytvoříme jednoduchou výhybku, ve které něco zkusíme a pokud se to nezdaří, nastane error, stane se něco jiného. On error doplníme do try bloku mezi try a end try, přičemž vše od začátku až po on error se spouští postupně dokud nedosáhneme posledního příkazu, nebo nenastane chyba. V takovém případě se zbylé věci v try bloku ignorují a spouští se část následující za on error. V případě že problém nenastane, nestane se ani nic z toho co je za on error.
On error nám toho ale nabízí více. Můžeme jednoduše zjistit jaká chyba byla příčinou a dokonce získat její číslo, takové to oblíbené záporné číslo které nám programy sdělují, když se odporoučí do věčných lovišť. Normálně z takových čísel radost nemáme, ale tady je můžeme využít pro dobro věci. Například při chybě kdy uživatel něco zruší mu to asi nebudeme znovu připomínat dialogem, zato v případě že zadal špatnou hodnotu ho rádi požádáme o opravu. A jak na to? Jednoduše. Chceme-li vědět název chyby, přímo za on error napíšeme jméno proměnné do které chceme chybu uložit. Pro číslo chyby musíme ještě doplnit slovo number následované další proměnnou.
V případě že potřebujete reagovat pouze na jednu chybu, můžete to udělat rovnou. Skript upravte takto:
try display dialog "napis cislo" default answer 0 set vysledek to text returned of result as integer display dialog "Tve cislo je: " & vysledek on error number -128 display dialog "Opravdu Cancel?" end try beep 2
Nyní je první dialog součástí try bloku a tedy v případě že zmáčkneme Cancel dojde k aktivování on error. Když nezadáme číslo, program se přihlásí s chybou, jako by try blok nebyl použit. Tímto způsobem, nebo klasickým ifem za on error můžeme odchytit spoustu chyb a jednotlivě na ně reagovat. Jaké ty chyby ale jsou? Následuje stručný seznam oněch záporných neštěstí které jsou v počítači schované a čekají na svoji příležitost. Vzhledem k faktu že nepoužívám lokalizovaný systém uvádím pouze jejich anglická znění.
–34 Disk <name> is full. –37 Bad name for file. –39 End of file error. –43 File <name> wasn’t found. –44 Disk <name> is write protected. –47 File <name> is busy. –48 Duplicate file name. –49 File <name> is already open. –61 File not open with write permission. –120 Folder <name> wasn’t found. –128 User canceled. –1700 Can’t make <data> into a <type>. –1708 <reference> doesn’t understand the <commandName> message. –1712 Apple event timed out. –1728 Can’t get the specified item. –1730 Container specified was an empty list. –2701 Can’t divide <number> by zero. –2702 The result of a numeric operation was too large. –2703 <reference> can’t be launched because it is not an application. –2704 <reference> isn’t scriptable. –2705 The application has a corrupted dictionary. –2708 Attempt to create a value larger than the allowable size. –2721 Can’t perform operation on text longer than 32K bytes. –2753 The variable <name> is not defined. –30720 Invalid date and time <date string>.
To je pro dnešek vše, pokud chcete můžete si do příště něco zkusit a třeba se lépe poznáte i s nějakou tou chybou, nebo jí naopak naučíte poslouchat a neukazovat se. Příkaz try má široké využití a spolu s if a repeat jsou základem složitějších programů. A právě na repeat se podíváme příště.
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.