3. Tutoriál Script-Fu

V tomto krátkom kurze prejdeme základy jazyka Scheme, ktoré sú nevyhnutné pre zvládnutie skriptov Script-Fu. Potom napíšeme skript, ktorý môžete pridať medzi ostatné skripty. Skript si najprv vyžiada text, ktorý sa potom stane súčasťou nového obrázka. Rozmery obrázka budú presne zodpovedať textu. Skript neskôr vylepšíme o možnosť nastavenia prázdneho priestoru okolo textu. Nakoniec vám poradíme, ako si ďalej prehlbovať úroveň vašich vedomostí týkajúcich sa skriptov Script-Fu.

[Note] Poznámka

Táto časť vychádza z Používateľskej príručky, ktorú pre GIMP ver. 1 napísal Mike Terry.

3.1.  Zoznámenie sa s jazykom Scheme

3.1.1.  Začíname Schémovať

Po prvé, treba si zapamätať, že:

Každý výraz v Scheme je uzavretý do okrúhlych zátvoriek ().

Po druhé,

prvý prvok v zátvorke je vždy meno alebo operátor funkcie. Ostatné nasledujúce členy predstavujú parametre tejto funkcie.

Avšak nie všetko, čo je uzavreté v zátvorkách, je funkcia. Zátvorky môžu obsahovať aj položky zoznamu. Ale to si ukážeme neskôr. Tento zápis sa nazýva ako prefixový zápis, pretože funkcia predchádza všetkému ostatnému. Ak ovládate postfixový zápis, alebo vlastníte kalkulačku používajúcu funkciu Reverse Polish Notation (väčšina HP kalkulačiek), pravdepodobne nebudete mať problém zorientovať sa v zápise jazyka Scheme.

Po tretie,

matematické operátory sú tiež považované za funkcie, preto sú pri zapisovaní matematických výrazov na prvom mieste.

Toto vysvetlenie logicky zapadá do už spomínaného pojmu prefixový zápis.

3.1.2. Príklady Prefixových, Infixových a Postfixových zápisov

Uvádzame niekoľko príkladov, ktoré ilustrujú rozdiely medzi prefixovými, infixovými a postfixovými zápismi. Sčítanie 1 a 23:

  • Prefixový zápis: + 1 23 (tento spôsob zápisu sčítania vyžaduje Scheme)

  • Infixový zápis: 1 + 23 (bežný spôsob zápisu sčítania)

  • Postfixový zápis: 1 23 + (spôsob zápisu sčítania kalkulačiek HP)

3.1.3.  Tréning v Scheme

Teraz si precvičíme, čo sme sa doteraz naučili. Ak ste GIMP doteraz nespustili, urobte to teraz. Z hlavnej ponuky vyberte položky Filters (Filtre)Script-FuConsole. Otvorené okno konzola Script-Fu umožňuje interaktívnu prácu v Scheme. Konzola Script-Fu sa objaví v priebehu niekoľkých sekúnd.

3.1.4.  Okno Script-Fu konzola

V spodnej časti tohto okna sa nachádza vstupné pole označené ako Current Command (Prechádzať). Tu si môžeme interaktívne vyskúšať jednoduchý príkaz v Scheme. Začneme jednoduchým sčítaním čísel:

(+ 3 5)

Do vstupného poľa napíšeme hore uvedený príkaz a stlačíme kláves Enter. Vo veľkom okne sa objaví očakávaný výsledok 8.

Obrázok 13.3. Použitie konzoly Script-Fu.

Použiť konzolu Script-Fu.

Čo však v prípade, keď chceme spočítať viac ako jedno číslo? Funkcia + môže obsahovať dva alebo viac argumentov, takže toto nie je problém:

(+ 3 5 6)

Dostaneme očakávaný výsledok: 14.

Zatiaľ to bolo jednoduché. Výraz napíšeme v Scheme a ten sa okamžite vyhodnotí v Konzole Script-Fu. Ale teraz pozor...

3.1.5.  Pozor na nadbytočné zátvorky

Možno ste boli zvyknutí, tak ako ja, používať zátvorky vždy, keď ste potrebovali sprehľadniť zložitú matematickú rovnicu. V Scheme však musíte dávať veľký pozor aby ste zátvorky použili na správnom mieste. Napríklad, k výsledku súčtu 5 a 6 chcete pripočítať čísla 3 a 7:

3 + (5 + 6) + 7 = ?

Keďže operátor + môže sčítať zoznam čísel, môže vás zvádzať aby ste hore uvedené zapísali ako:

(+ 3 (5 6) 7)

Tento zápis je však nesprávny. Pamätáte sa, že každý výraz v Scheme začína a končí okrúhlymi zátvorkami. Takže prekladač Scheme si bude myslieť, že sa snažíte volať funkciu pomenovanú ako 5 v druhej skupine zátvoriek a nie sčítať tieto čísla pred pripočítaním čísla 3.

Správny zápis tohto výroku by mal vyzerať takto:

(+ 3 (+ 5 6) 7)

3.1.6. Uistite sa, že máte v poriadku medzery

Ak poznáte niektoré ďalšie programovacie jazyky ako napr. C/C++, Perl alebo Java viete, že na medzery okolo matematických operátorov si nemusíte dávať veľký pozor. Výraz uvedený nižšie je zapísaný správne:

        3+5, 3 +5, 3+ 5
      

Kompilátori jazykov C/C++, Perl a Java tento zápis akceptujú. Avšak neplatí to pre Scheme. V Scheme musí byť za každým matematickým operátorom (alebo za každou ďalšou funkciou alebo operátorom) medzera. V opačnom prípade by došlo k nesprávnej interpretácií výrazu.

V konzole Script-Fu skúšajte jednoduché matematické výrazy dovtedy, kým tento princíp nebudete dokonale ovládať.