AppleScript - rozhodová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

 

Kde se narodil známý fotograf František Drtikol?

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

Seriály

Více seriálů



Software

AppleScript - rozhodování

27. června 2006, 00.00 | Dnes nás čeká to nejdůležitější na celém AppleScriptu – rozhodování. Naučíme totiž náš program myslet a řešit jednoduché úkoly. K umělé inteligenci to bude mít ještě hodně daleko, ale pro naše potřeby to bohatě stačí. Ukážeme si jak nadefinovat výhybku buď/nebo, jak jí rozšířit o další podmínku a jak řešit složitější rozhodování s více možnostmi. Jste připraveni se rozhodnout?

Rozhodování má v AppleScriptu na starosti příkaz "if". Jeho základní jednořádkový tvar je if ano/ne then něco, více se ale používá jeho víceřádková varianta. Ta se tvoří tak že na prvním řádku je pouze if ano/ne then, pak následuje libovolný počet operacím, které se mají provést je-li splněna podmínka a vše uzavírá end if. Pamatujte si, že vše, co v Apple Scriptu začneme a má více jak jednu řádku, musíme také ukončit. Pokud tak neuděláme, dostaneme chybové hlášení. Stačí napsat na konec slovo end a AppleScript si slovo if už doplní sám, důležité ale je mít správný počet endů.

Ano/ne v základním tvaru je boolean, případně jakákoli jednořádková operace, jejíž výsledek je true nebo false. Může to být proměnná, nebo porovnání dvou čísel či proměnných, prostě cokoli, čím definujeme, zda je něco pravda či nikoli. Otevřete náš program a před get napište toto:

if tlacitko is "nesouhlasím" then beep 
Toto je ukázka jednořádkové formy a po spuštění a stisknutí "nesouhlasím" se pouze ozve zvuk, při stisku druhého tlačítka se nastane nic. My toho ale chceme určitě více, proto vše upravíme takto:
if tlacitko is "nesouhlasím" then
display dialog "Snad si to rozmyslíte..." buttons "OK" giving up after ¬
10 with icon note,
beep
end. 
V tomto případě jsme ke zvuku doplnili ještě dialog, v případě že je tedy podmínka splněna, jsou provedeny dvě operace, ale nic nám nebrání mít jich tam třeba sto. Zkuste si teď program spustit a zmáčknout "souhlasím", nestane se nic, proběhne pouze příkaz get. To znamená, že vše co pokračuje za uzavřeným if příkazem, je normálně provedeno, bez ohledu na celý if.


Častěji ale potřebujeme udělat výhybku buď/nebo, kdy se provede buď jedna nebo druhá část skriptu. "Buď" už umíme, jak ale udělat to "nebo". Od toho máme příkaz "else", který funguje jako rozšíření ifu, pro případ, že naše podmínka splněna nebyla. Ukažme si to na našem příkladu, před end napište:

else
a na další řádek:
display dialog "Tak drzím palce!" buttons "OK" giving up after 10 with icon note
Teď v případě, že nebylo zmáčknuto tlačítko "nesouhlasím", bude provedena pouze operace za else. Pozor, v tuto chvíli to platí i pro případ, že nebude zmáčknuto žádné tlačítko a okno samo po deseti vteřinách zmizí (giving up after 10). I tohle se dá v AppleScriptu vyřešit, můžeme totiž zase specifikovat v jakém případě proběhne else.

A jak jinak by se to mělo dělat než dopsáním dalšího ifu za else, kterým nastavíme další podmínku. Napišme tedy přímo za else:

if tlacitko is "souhlasím" then
V případě, že teď program spustíte a počkáte 10 vteřin, nestane se už nic. Nic nám ale nebrání přidat další else. Takto můžeme specifikovat velké množství podmínek a vytvořit tak složitou křižovatku spouštějící nejrůznější procesy. Dopišme tedy před end další
else 
a pod to:
display dialog "Halooo, je tam nekdo?" buttons "OK" default button 1 giving up ¬
after 10 with icon caution
Nyní máme vyřešeny všechny možnosti a program se umí rozhodnout a reagovat podle stisknutého tlačítka, ale sám i pozná, když se mu nevěnujeme a reaguje na to jiným dialogem. Víme už tedy o příkazu if téměř vše.


Ještě chci říct, že if může obsahovat libovolný počet operací, včetně dalších ifů, můžeme se tedy rozhodovat kdykoli se nám zlíbí. Poslední, co si dnes řekneme, je co dělat v případě, má-li se něco stát pouze při splnění více podmínek najednou. K tomu používáme slova "and" a "or", kterými rozšíříme if o další podmínky. Ukážeme si to na příkladu Do nového okna napište:

set x to 5 + 5
set y to 15 / 3
if x is 10 and class of y is real then
beep 
end
Po spuštění uslyšíte zvuk, protože x je 10, a y je real, zaměňte ale lomítko za div a neuslyšíte nic. And tedy určuje více podmínek, které musí být všechny splněny, naproti tomu or se spokojí jen s jednou splněnou podmínkou ze všech nadefinovaných. Zaměníme-li and za or, uslyšíme zase zvuk, i když y je integer. Samozřejmě se dá or a and mezi sebou kombinovat a používat společně a vytvořit tak složitou podmínku, která odfiltruje nežádoucí vstupy. A to je konec dnešního dílu, příště se podíváme na data a na kouzla, která s nimi AppleScript umí.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Software  

Diskuse k článku

 

Vložit nový příspěvek   Sbalit příspěvky

 

Repeat

Autor: jf Muž

Založeno: 27.06.2006, 09:41
Odpovědí: 0

Do rozhodování bych zařadil i Repeat:

Může mít podobu:

Repeat (forever)
Repeat (number) Times
Repeat While
Repeat Until
Repeat With (loopVariable) From (startValue) To (stopValue)
Repeat With (loopVariable) In (list)

Odpovědět na příspěvek

RE: Repeat

Autor: Zdeněk Poláček Muž

Založeno: 27.06.2006, 09:57

Tomu bude věnován samostatný článek. Tento je zaměřený pouze na if.

Odpovědět na příspěvek

Dost offtopic otazka

Autor: Jakub Steinbauer Muž

Založeno: 12.07.2006, 17:19
Odpovědí: 0

Dobrý den, předem se omlouvám za OT, ale nevím kde jinde se zeptat. Otázka zní, dá se přes tento applescript, nějakým způsobem zaregistrovat přípona souboru, aby poté tento soubor byl automaticky spouštěn tímto programem. Konkrétně se mi jedná o shellový script přes terminal. Potřebuji, aby uživatel pouze kliknul a nemusel si to zaregistrovávat sám. Nebo neexuistuje nějaká defaultní přípona pro terminál? Díky za jakýkoliv nápad

Odpovědět na příspěvek

RE: Dost offtopic otazka

Autor: jf Muž

Založeno: 13.07.2006, 06:21

...přípona je podle toho v čem je skript napsaný (není nutná). Můžeš volat skript přímo z AS aplikace -- poklepáním se spustí a zavolá si tvůj skript sama...

viz

http://
www.mujmac.cz/art/tt/caso
vane-ulohy-1.html
http:/
/www.mujmac.cz/art/tt/cas
ovane-ulohy-2.html

Odpovědět na příspěvek

RE: RE: Dost offtopic otazka

Autor: Jakub Steinbauer Muž

Založeno: 13.07.2006, 17:29

Děkuji za navedení, jak k tomuto problému přistupovat. Vytvořím si tedy AP script, kterej zavolá terminal a předá mu soubor s .sh scriptem. To by bylo dobré řešení. Bohužel teď nevím jestli jsem udělal něco špatně, ale spouštel jsem si script na to přehrání náhodné písničky v iTunes, při prvním poklepání se spustil, ale při druhém se mi to už podařilo zaregistrovat se script editorem, a od té chvíle se to spouští defaultně v něm, a to nechci(což já, ale zákazník a jeho uživatelé). Chtěl bych aby ten skript byl pouze spustitelný ne editovatelný, je to možné nějakým způsobem udělat? Předem díky moc.

Odpovědět na příspěvek

RE: RE: RE: Dost offtopic otazka

Autor: jf Muž

Založeno: 16.07.2006, 22:33

Skripty v AS lze uložit jako standardní aplikace -- Soubor > Uložit jako...

Formát: Aplikační balík (nebo jen Aplikace)
Volby: Pouze spustitelný

Takto uložený skript má koncovku .app a spouští se jako ostatní aplikace (zpravidla poklepáním na ikonku)...

http://www.
mujmac.cz/art/sw/applescr
ipt_2.html

Odpovědět na příspěvek

RE: RE: RE: RE: Dost offtopic otazka

Autor: Jakub Steinbauer Muž

Založeno: 19.07.2006, 23:22

Diky moc.

Odpovědět na příspěvek

Čeština

Autor: myneur Muž

Založeno: 08.09.2006, 12:05
Odpovědí: 0

jsem si říkal, proč v tom příkladu nejsou akcenty..
nicméně aby to napsalo český text do dialogu je potřeba stringu říct, aby ze sebe udělal unicode,
takže:
display dialog \"Čeština funguje\" as Unicode text with icon note
zobrazí hlášku správně s akcenty.

Nejde nějak nastavit, aby to byl unicode implicitně? Psát za každou hlášku as Unicode text je mírný opruz..

Odpovědět na příspěvek

 

 

Vložit nový příspěvek

Jméno:

Pohlaví:

,

E-mail:

Předmět:

Příspěvek:

 

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: