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:
-
30. září 2024
-
4. října 2024
-
14. listopadu 2024
-
11. prosince 2024
Sazba
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):
- Skriptujeme InDesign (1): Úvod
- Skriptujeme InDesign (2): První kroky
- Skriptujeme InDesign (3): Základy JavaScriptu poprvé
- Skriptujeme InDesign (4): Základy JavaScriptu podruhé
- Skriptujeme InDesign (5): Dokumenty poprvé
- Skriptujeme InDesign (6): Dokumenty podruhé
- Skriptujeme InDesign (7): Výstup
- Skriptujeme InDesign (8): Stránky
- Skriptujeme InDesign (9): Stránkové objekty poprvé
- Skriptujeme InDesign (10): Stránkové objekty podruhé
- Skriptujeme InDesign (11): Dialogy
- Skriptujeme InDesign (12): Text poprvé
- Skriptujeme InDesign (13): Text podruhé
- Skriptujeme InDesign (14): Text potřetí
- Skriptujeme InDesign (15): Hledání a záměny poprvé
- Skriptujeme InDesign (16): Hledání a záměny podruhé
- Skriptujeme InDesign (17): Regulární výrazy
- Skriptujeme InDesign (18): Tabulky poprvé
- Skriptujeme InDesign (19): Tabulky podruhé
- Skriptujeme InDesign (20): Obrázky poprvé
- Skriptujeme InDesign (21): Obrázky podruhé
- Skriptujeme InDesign (22): Obrázky potřetí
- Skriptujeme InDesign (23): ESTK aneb jak na editaci a ladění skriptů
- Skriptujeme InDesign (24): Vrstvy
- Skriptujeme InDesign (25): Barvy poprvé
- Skriptujeme InDesign (26): Barvy podruhé
- Skriptujeme InDesign (27): Barvy potřetí
- Skriptujeme InDesign (29): Metadata podruhé
- Skriptujeme InDesign (30): Návěští
- Skriptujeme InDesign (31): Okna
- Skriptujeme InDesign (32): Reakce na události
- Skriptujeme InDesign (33): Novinky v CS3 verzi
Tématické zařazení:
» Rubriky » Polygrafie
-
14. května 2014
Jak vkládat snímky do galerií a soutěží? Stručný obrazový průvodce
-
23. dubna 2014
Konica Minolta přenesla výhody velkých zařízení do kompaktních modelů
-
12. června 2012
-
9. dubna 2014
-
5. ledna 2017
-
6. září 2004
OKI snižuje ceny barevných laserových tiskáren C3100 a C5200n
-
13. května 2004
-
19. ledna 2004
QuarkXPress Passport 6: předvedení nové verze na konferenci Apple Forum 27.1.2004
-
6. února 2001
-
30. listopadu 2014
Nový fotoaparát α7 II: první plnoformát s pětiosou optickou stabilizací obrazu na světě
-
14. října 2024
-
10. prosince 2024