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í,

  1. odpadla nám deklarace typu proměnné(S-Fu toto nepotřebuje).
  2. 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

Příspěvek byl přidán dne 11. 06. 2003 v 22:30 a je zařazen do kategorií Nástroje.
Komentáře můžete sledovat pomocí RSS 2.0.

 

Počet komentářů: 1

  1. cornelius:

    Omlouvam se za to neodsazovane odsazovani, holt, html neni na psani zdrojaku moc privetive ani pres tag PRE.

Zanechat komentář