Skriptujeme InDesign (3): Základy JavaScriptu poprvé - Grafika.cz - vše o počítačové grafice

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:

Saal Digital

 

Jaký největší formát fotoknihy v řadě Professional Line ve formátu na šířku lze ve standardní nabídce Saal Digital Fotoservice objednat? Nápověda: Logo sponzora soutěže

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



Software

Skriptujeme InDesign (3): Základy JavaScriptu poprvé

Adobe InDesign sazba

16. ledna 2006, 00.00 | Dnešní díl našeho seriálu bude věnován programování v obecném JavaScriptu. Půjde tedy o
trošku náročnější exkurz do říše programování, který je ovšem pro další výklad nezbytný.
Podívejme se tedy na pojmy jako jsou proměnná či datový typ, a to formou názorných
příkladů.

V této části našeho seriálu se (po předchozím seznámení s pojmy jako je objekt, metoda či vlastnost v rámci objektového modelu InDesignu) zaměříme na další důležité prvky a vlastnosti jazyka JavaScript (tentokrát jeho základní, Core specifikace), které je třeba při skriptování v InDesignu znát. Podat na malém prostoru látku, která je jinak námětem mnohasetstránkových příruček, není samozřejmě snadné, když by navíc přílišné zabíhání do detailů bylo samoúčelné a možná by i leckterého začátečníka odradilo. Čtenář ať tedy následující výklad bere spíše jako pobídku k vlastnímu samostudiu, založenému třeba jak na příslušné části výukových materiálů InDesignu, tak i referenci JavaScriptu či příslušné odborné literatuře. Na druhou stranu bylo látky k výkladu i přesto tolik, že jsme považovali za vhodné podat danou problematiku na dvě pokračování.

K pojmu proměnná

Zásadním prvkem, používaným v JavaScriptu obdobně jako v jiných programovacích jazycích, jsou proměnné, tedy jakési pojmenované kontejnery pro data, s kterými lze podle potřeb manipulovat. Proměnné nám takto dovolují pracovat s čísly, textovými řetězci, objekty InDesignu i dalším obsahem. Každá proměnná je určena svým názvem a dále obsaženou hodnotou. Vložení hodnoty do proměnné se realizuje pomocí přiřazení, tj. zápisem

nazev_promenne = výraz;

kde výraz je buďto konkrétní hodnota (třeba číslo nebo textový řetězec) nebo výsledek vyhodnocení nějakého výrazu JavaScriptu (například výpočtu, použití metody apod.).

Při prvním použití takovéhoto přiřazení ve skriptu je proměnná tzv. deklarována, jinou možnost deklarace zde představuje použití klíčového slova var, kdy zápis je následující:

var nazvy_promennych;

Konečně je možná i deklarace, při které se zároveň provede přiřazení počáteční hodnoty, tedy

var nazev_promenne = vyraz;

Příklady:

cisloStranky = 10; //proměnné cisloStranky přiřadí číslo 10
var i = 2; //deklaruje proměnnou i a přiřadí ji číslo 2
var x= y+2 //deklaruje proměnnou x a přiřadí ji výsledek součtu proměnné y a čísla 2
var myString = "Ahoj"; //deklaruje proměnnou myString a přiřadí ji textový řetězec "Ahoj"
var i; //deklaruje proměnnou i
var j; //deklaruje proměnnou j
var i,j; //deklaruje proměnné i a j

Jak a proč se proměnné používají?

Význam a způsob využití proměnných při skriptování v InDesignu se pokusme objasnit na konkrétním příkladu. Bude jím skript, mající stejný účel jako ten, který jsme použili v minulé části tohoto seriálu (tj. vytvoří nový dokument, do kterého vloží textový rámeček s textem "Helo World!"). Připomeňme text původního skriptu:

/* Prvni skript: Hello World!
S jeho pomoci se naucime zaklady zapisu kodu
a take zaklady prace s objekty, vlastnostmi a metodami v InDesignu*/
//Nejprve vytvorime dokument
app.documents.add();
//pridame textovy ramecek
app.activeDocument.textFrames.add();
//nastavime jeho rozmery
app.activeDocument.textFrames[0].geometricBounds = ["0p0", "0p0", "18p0", "18p0"];
//a priradime mu text
app.activeDocument.textFrames[0].contents = "Hello World!";

Jak jsme již v minulé části řekli, daný skript jsme řešili značně jednoduchým, oproti normálu atypickým způsobem, abychom demonstrovali základní možnosti použití metod a vlastností objektů. Cestu, jak daný skript řešit elegantněji, nám poskytují právě proměnné. Skript je možno s jejich pomocí napsat třeba takhle:

/* Opet skript Hello World!
Tentokrat s vyuzitim promennych */
//Nejprve promenne myDocument priradime novy dokument
var myDocument=app.documents.add();
//pridame promennou myTextFrame obsahujici novy textovy ramecek
var myTextFrame=myDocument.textFrames.add();
//nastavime rozmery ramecku
myTextFrame.geometricBounds = ["0p0", "0p0", "18p0", "18p0"];
//a priradime text
myTextFrame.contents = "Hello World!";

Ve skriptu byly použity dvě proměnné myDocument a myTextFrame. Prvním příkazem skriptu jsme přitom deklarovali proměnnou myDocument a přiřadili ji dokument, vytvořený metodou add(). V dalším kroku jsme pak obdobně deklarovali proměnnou myTextFrame, obsahující nově vytvořený textový rámeček.

Logická je samozřejmě otázka, k čemu je vlastně použití proměnných ve skriptech dobré. Důvodů je zde vícero. Ten nejvíce nasnadě spočívá v tom, že proměnná dovoluje velmi efektivně zkrátit zápis skriptu a rovněž jej zpřehlednit. Použitím proměnných se také stávají výrazně snazšími různé úpravy skriptu (pokud bychom například daný ukázkový skript chtěli použít pro aktuální dokument otevřený v InDesignu, stačí nám přepsat počáteční instrukci z

var myDocument=app.documents.add();

na

var myDocument=app.activeDocument;

zbytek kódu pak můžeme ponechat beze změny atd.).

Konečně není od věcí povšimnout si odlišného způsobu adresování objektů. Například přiřazeními v úvodu našeho ukázkového skriptu jsme definovali jednoznačné reference na objekty (nově vytvořený dokument, nově vytvořený rámeček), které jsme dříve museli popisovat pracnějším způsobem.

Proměnné v praxi

Proměnné mají skutečně zcela zásadní význam a skriptování se bez jejich nasazení prakticky neobejde. Podívejme se tudíž na některé praktické záležitosti spojené s jejich užíváním. Především je takto dobré vědět, že konvence pro pojmenování proměnných (resp. syntaxe JavaScriptu) nedovoluje v názvech použít mezery a na prvním místě názvu číslice, v názvech je rozlišováno mezi velkými a malými písmy. Dále nelze u proměnné použít stejné pojmenování, jaké je použito u tzv. klíčových slov v rámci obecného JavaScriptu či objektového modelu InDesignu.

Jinak je pojmenování zcela v režii uživatele. Jméno by ale každopádně mělo být takové, aby naznačovalo význam (obsah) proměnné či způsob jejího užití. Proměnné pojmenované třeba a, b či xyz jsou těžko pochopitelné pro každého, kdo chce skript číst či upravovat, autora skriptu z toho často pár minut po vytvoření dané proměnné nevyjímaje. Pro přehlednější zápis víceslovných pojmenování lze přitom použít třeba podtržítka (např. prumer_kruhu nebo text_odstavce) nebo střídání velkých a malých písmen (např. PrumerKruhu či TextOdstavce). Obvyklým trikem (použitým i ve skriptu výše), jak při pojmenování zabránit kolizi s klíčovými slovy JavaScriptu, je použít na začátku názvu proměnné řetězec my (od anglického "můj": tedy třeba myDocument, myParagraph, myChar aj.). Nastíněný problém se samozřejmě týká anglického pojmenování proměnných, na které lze nicméně velmi často narazit v cizích skriptech (ukázky z dokumentace či jiné výukové literatury, volně šiřitelé skripty i skripty komerční aj.), stejně jako v případě komentářů navíc doporučujeme zvážit použití angličtiny i v případě skriptů vlastních.

Jak již bylo naznačeno výše, není použití výrazu var pro deklaraci proměnné povinné - proměnnou lze jednoduše deklarovat pouhým přiřazením. Je-li nicméně var použit, je proměnná chápána jako lokální, tj. platná pouze v rámci určité funkce, v opačném případě je globální, tj. platná v rámci celého skriptu - více pochopitelný bude daný, pro praxi dosti důležitý rozdíl v následující části tohoto seriálu, kde o funkcích hovoříme podrobněji. Na tomto místě se spokojme s konstatováním, že bude-li ve skriptu použita alespoň jedna funkce, je vhodné všechny proměnné deklarovat s pomocí var. Použití var pak rovněž činí skript čitelnějším. Proměnné bychom měli pokud možno deklarovat všechny na jednom místě a s pomocí komentářů popsat způsob jejich použití.

Obvyklé datové typy a jejich zpracování

Jak jsme si mohli již dříve všimnout, proměnné (a také třeba vlastnosti objektů či výsledky použití metod objektů) nabývají hodnot různých typů. V JavaScriptu lze takto pracovat především s čísly, která mohou být celá (typ Integer, zapisujeme třeba 3, -12, 100000 apod.) nebo s plovoucí desetinnou tečkou (floating-point, zapisujeme třeba 3.14, -1.44, .333, 6.02e+23 aj.). Stejně jako s jinými hodnotami lze i s čísly provádět různé operace s pomocí tzv. operátorů. U čísel jsou nasnadě zejména aritmetické operátory sčítání (+), odčítání (-), násobení (*), dělení (/), modulus (% - vrací celočíselný zbytek) a dále pak třeba inkrement (++, zvyšuje hodnotu operandu o 1, více viz náš výklad o cyklech v další části seriálu) a dekrement (--, snižuje hodnotu operandu o 1, blíže opět více ve výkladu o cyklech). S číselnými hodnotami lze rovněž provádět porovnávání s pomocí relačních operátorů jako jsou rovná se (==), nerovná se (!=), je menší (<) atp. - výsledkem je zde logická hodnota (viz výklad dále). K dispozici jsou pak různé zkratkovité (shorthand) operátory (třeba +=, -= aj.), které dovolují operace zapsat úspornějším způsobem, a také škála pokročilých matematických funkcí (poskytnutých v rámci metod předdefinovaného objektu Math). Výrazy mohou mít i složitější strukturu, používající ke členění závorky.

Příklady:

var sum = i+2 //proměnné sum přiřadíme součet hodnot proměnné i a čísla 2
x = x+y //sečte proměnné x a y a výsledek výpočtu vloží do proměnné x
palce=centimetry/2.54 //podělí obsah proměnné centimetry číslem 2.54 a výsledek uloží do proměnné palce
x=((1*3+5)-10) //proměnné x přiřadí hodnotu -2
x++ //zvýší hodnotu proměnné o jedničku
x=x+1 //provede totéž co předchozí příkaz
x==4 //vrací výsledek porovnání proměnné x a čísla 4
x+=y //totéž jako x=x+y

Jiný typ hodnoty, se kterým budeme i ve skriptech pro InDesign velmi často pracovat, je textový řetězec (typ String). Jedná se o posloupnost znaků, která je vložena do uvozovek (třeba "Ahoj", "Dobrý den" apod.). Nejobvyklejší operací proveditelnou s řetězci je spojování využívající operátoru plus (+).Dále lze ke zpracování řetězců využít třeba operátorů porovnání nebo předdefinovaných metod objektu String, použitelných například k zjištění délky řetězce, jeho prohledávání, nahrazování výskytů určitého výrazu apod.

Příklady:

pozdrav="Dobrý"+"den" //proměnné pozdrav přiřadí řetězec "Dobrý den"
jmeno=="Novák" //vrací výsledek porovnání proměnné jméno a řetězce Novák
jmeno.length //vrací délku textové proměnné jmeno (pro "Novák" je to 5)

Zejména v podmínkách a cyklech (viz další výklad) či při nastavování některých vlastností objektů InDesignu se dále používá logických hodnot true a false (pravda, nepravda). Uvedené hodnoty se získají obvykle jako výsledek vyhodnocení nějakého porovnání (viz příklady výše), k další práci s logickými hodnotami se pak používá logických operátorů (AND - &&, OR - || a NOT - !) a rovněž metod předdefinovaného objektu Boolean.

Příklady (více až v příští části při výkladu o podmínkách):

1==0 //vrací hodnotu false
!(1==0) //vrací hodnotu true

Jak konvertovat typy proměnných

Zajímavé jsou poměrně silné možnosti JavaScriptu měnit za chodu typ dané proměnné. Obvyklé jsou zde zejména převod čísel na řetězce (například když tyto chceme vložit do textu, použít v uživatelském dialogu apod.) či převod textu na čísla (pokud potřebujeme s původně textovými hodnotami provést třeba výpočet).

Příklady:

Skript

cislo=5;
retezec=cislo+"";

přiřadí proměnné retezec hodnotu "5"

Skript

retezec="10";
cislo=retezec-0;

přiřadí proměnné cislo hodnotu 10. Uvedená metoda není ovšem tak univerzální jako výše naznačený převod čísel na řetězce, lepší výsledky zaručuje použití metod parseInt() pro celočíselné hodnoty a parseFloat() pro plovoucí tečku:

parseInt("3.14 metru") //vrací celé číslo 3
parseFloat("3.14 metru") //vrací reálné číslo 3.14

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

Tématické zařazení:

 » Rubriky  » VSE  

 » Rubriky  » Go verze  

 » Rubriky  » Sazba  

 » Rubriky  » Polygrafie  

 » Rubriky  » Software  

 

 

 

 

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

Uživatelské jméno:

Heslo: