Script-fu II. část - Proměnné a Funkce
autor: Ene dne 11. 06. 2003
Po dvou měsících se opět setkáváme u dalšího dílu seriálu o Script-Fu, skriptovacím jazyce našeho oblíbeného editoru GIMP. V dnešním díle si povíme něco o deklaraci proměnných a funkcí, které se nám budou hodit v našem dalším snažení. Pokud vystačí místo, povíme si také něco o seznamech a funkcích pro jejich zpracování.
Úvod dílu
V minulém díle jsme si pověděli něco o základních informací o jazyce Scheme, který modul Script-Fu požívá a naznačili jsme si syntaxi tohoto jazyka. V dnešním díle si ukážeme, jak definovat proměnné a funkce pro práci s nimi. Nakonec(snad) dostanete domácí úkol.
Než začneme, osvěžíme si formu, jakou budu jednotlivé části zapisovat:
- proměnná- kurzívou budou označovány v textu proměnné.
- funkce(zápis kódu skriptu) - formát zápisu skriptů nebo funkcí v textu.
- - formát označující stisk určené klávesy
- cesta -> k -> příkazu – text určující cestu nebo postup k docílení požadovaného
Předpokládám, že konzoli už máte spuštěnou, můžeme se do toho tedy pustit.
Deklarace proměnných
Aby jsme mohli ve svých skriptech pracovat s daty, musíme pro tato dat nejdříve vytvořit proměnné. Proměnné jsou symboly které mohou představovat např. šířku obrázku, zvolenou barvu atd… Proměnné v GIMPu nemají žádný přiřazený typ(celočíselná, řetězec…).
Deklarace proměnných, tedy jejich vytvoření se děje pomocí konstrukce:
(let* (proměnné) výrazy )
Takže pro deklaraci proměnných, např. z příkladu diskriminantu z minula, by mohl být použit následující kód:
(let* ( (a 1) (b 1) (c 1) ) (- (* b b) (* 4 a c)) )
Kde část ( (a 1) (b 1) (c 1) ) je deklarace proměnných(inicializovaných na hodnotu 1) a část (- (* b b) (* 4 a c) ) je funkce, která se s proměnnými má provést.
Takto nadefinované proměnné však existují pouze mezi závorkami, do kterých je uzavřen příkaz let*, a kde byly nadefinovány - jsou to tzv. lokální proměnné.
Odsazování
Pokud se podíváme na předchozí příkaz, určitě nám bude připadat nepřehledný a snadno se v něm ztratíme. Snadná pomoc, interpret jazyka Scheme ignoruje tzv. bílé mezery(tab, nový řádek…) a tak můžeme zdrojový kód našeho skriptu bez problémů odsazovat aby jsme se v něm vyznali. Náš výpočet diskriminantu tak můžeme zapsat i jako:
(let* (
(a 1)
(b 1)
(c 1)
)
(- (* b b) (* 4 a c) )
)
V našem případě ale stále zůstaneme u jednořádkového zápisu(i když budu občas zapisovat strukturovaně), poněvadž Script-Fu konzola nám nic jiného nezbaští. Odsazování si užijeme až budeme vytvářet skripty do souboru.
Přiřazení hodnoty proměnné
Pokud jsme již proměnné zinicializovali a chceme jim přiřadit nějakou hodnotu během běhu skriptu, pak k tomu použijeme příkaz set!, jehož syntaxe je:
(set! čemu (co_přiřadit))
Kde čemu je jméno proměnné, které chceme přiřadit hodnotu co_přiřadit :-) Pokud jste si něco zapamatovali z minulého dílu tak určit co dělá následující kód pro vás nebude problém.
(let* ((a 10)) (set! a (* a a)) )
A kdyby jste si nebyli jistí, stačí jej zadat našemu oblíbenému nástroji, konzoli Script-Fu.
Funkce
Nuž, proměnné máme za sebou, je čas podívat se na práci s funkcemi. Funkce obecně slouží k zjednodušení zápisu, například výpočtu. Při tvorbě skriptů je budeme využívat velmi často. Definovat vlastní funkci můžete pomocí následujícího zápisu:
(define (jméno seznam_parametrů) (akce) )
kde jméno označuje jméno naší funkce, seznam-parametrů je seznam proměnných, oddělených mezerami. Poslední část akce je samotné tělo funkce, tedy ta část, která (většinou) dělá něco užitečného. Příkladem by mohl být nám již známý diskriminant:
(define (diskriminant a b c) (- (* b b) (* 4 a c) ) )
diskriminant je název funkce, a, b, c jsou proměnné a vzorec pro výpočet diskriminantu snad popisovat nemusím. Po zapsání funkce stačí ji jen zavolat se správnými parametry a voila, máme výsledek.
Na rozdíl od jiných jazyků si můžeme u funkcí v jazyce Scheme všimnout dvou věcí,
- odpadla nám deklarace typu proměnné(S-Fu toto nepotřebuje).
- nemusíme se starat o návratovou hodnotu funkce, neboť automaticky dostaneme výsledek poslední operace v bloku akce.
To je dnes o funkcích v podstatě vše. Nyní si můžete zkusit zadat náš příklad na diskriminant na konzoli a pak si zvolit čísla, pro které chceme diskriminant spočítat. Můžete dostat něco takového.

Dnešní domácí úkol pojmeme jako samostudium. Zkuste si vybrat nějaké matematické funkce a zkuste si je sami stvořit v GIMPu. A nezapomeňte Pozor na mezery a závorky!
Příště se podíváme na seznamy a práci s nimi, neboť právě seznamy budou to s čím budeme většinou pracovat.
cornelius
15.06.2003 07:56 at 07:56
Omlouvam se za to neodsazovane odsazovani, holt, html neni na psani zdrojaku moc privetive ani pres tag PRE.