3.2. Premenné a funkcie

Teraz, keď už viete, že každý výrok v Scheme je uzavretý v okrúhlych zátvorkách a že meno funkcie alebo operátora je uvedené na prvom mieste, musíte sa naučiť ako vytvoriť a používať premenné. To isté platí aj o tvorbe a používaní funkcií. Začnime s premennými.

3.2.1.  Deklarácia premenných

Hoci existuje viacero spôsobov deklarácie premenných, najpoužívanejšia je metóda pomocou zápisu let*. Ak poznáte niektoré ďalšie programovacie jazyky, tento zápis je ekvivalentný definovaniu zoznamu lokálnych premenných a rozsahu ich platnosti. Napríklad deklarácia dvoch premenných, a a b, inicializovaných na hodnoty 1 a 2:

        (let*
           (
              (a 1)
              (b 2)
           )
           (+ a b)
        )
      

alebo ako jednoriadkový zápis:

(let* ( (a 1) (b 2) ) (+ a b) )
[Note] Poznámka

Ak používate konzolu Script-Fu, budete musieť všetko napísať do jedného riadku. Avšak za účelom zvýšenia čitateľnosti kódu je dobré používať rovnaký spôsob odsadenia. Viac si o tom povieme v časti zameranej na biele znaky.

Takto sú deklarované dve lokálne premenné a a b, sú inicializované, a nakoniec je zobrazený ich súčet.

3.2.2. Čo je to lokálna premenná?

Určite ste si všimli, že súčet (+ a b) sme zapísali vo vnútri zátvoriek výrazu let*, nie za nimi.

Je to tak preto, lebo výrok let* definuje oblasť skriptu, v ktorej sú deklarované premenné použité. Ak výrok (+ a b) napíšete za výrok (let* …), vznikla by chyba, lebo deklarované premenné sú platné len vnútri výroku let*. V tomto prípade sa jedná o premenné, ktoré sa medzi programátormi nazývajú lokálne premenné.

3.2.3. Všeobecná syntax let*

Všeobecný zápis výroku let* je nasledujúci:

        (let* ( premenné )
          výrazy )
      

kde premenné sú deklarované vnútri zátvoriek, napr. (a 2), a výrazy sú akékoľvek platné výrazy Scheme. Nezabudnite, že premenné deklarované na tomto mieste sú platné iba vnútri výroku let*. Sú to lokálne premenné.

3.2.4. Biele znaky

Už sme spomínali, že svoj kód budete chcieť sprehľadniť a usporiadať pomocou odsadenia. Je to dobrá myšlienka a pre Scheme to nie je problém. Interprétor Scheme biele znaky ignoruje. Z toho dôvodu máte v používaní bielych znakov voľnú ruku. Svoj kód môžete ich použitím sprehľadniť a usporiadať podľa potreby. Avšak ak pracujete v okne Konzola Script-Fu, celý výraz musíte napísať na jeden riadok. To znamená, že celý výraz od prvej po poslednú zátvorku musí byť na jednom riadku.

3.2.5. Priradenie novej hodnoty k premennej

Často sa stáva, že inicializovanej premennej musíte neskôr v skripte zmeniť hodnotu. Hodnotu premennej zmeníte pomocou výroku set!:

        (let* ( (theNum 10) ) (set! theNum (+ theNum theNum)) )
      

Skúste si najprv typnúť, čo uvedený výrok vykoná a až potom ho zadajte do konzoly Script-Fu.

[Note] Poznámka

Znak \ vyjadruje, že riadok tu nie je ukončený. Ignorujte ho. Do konzoly Script-Fu ho nepíšte a ani nestlačte kláves Enter. Jednoducho pokračujte v písaní nasledujúceho riadku.

3.2.6. Funkcie

Teraz, keď ste sa už naučili používať premenné, skúsme sa pozrieť na nejaké funkcie. Nasledujúca syntax slúži na deklaráciu funkcie:

        (define
           (
              meno
              zoznam parametrov
           )
           výrazy
        )
      

kde meno predstavuje meno funkcie, zoznam parametrov je miesto na pomenovanie parametrov funkcie a výrazy predstavujú súbor výrazov, ktoré funkcia vykoná pri svojom zavolaní. Napríklad:

(define (AddXY inX inY) (+ inX inY) )

AddXY je meno funkcie a inX a inY predstavujú premenné. Táto funkcia vezme dva parametre a sčíta ich.

Ak programujete v iných imperatívnych jazykoch (napr. C/C++, Java, Pascal, atď.), možno ste si všimli, že v porovnaní s inými programovacími jazykmi pri definovaní funkcie chýbajú niektoré položky.

  • Po prvé, parametre nemajú žiadne typy (t. j. nedeklarujeme ich ako reťazce alebo čísla a pod.). Scheme je beztypový jazyk. Je to veľmi praktické a umožňuje to rýchlejšie písanie skriptov.

  • Po druhé, všimnite si, že tu sa nemusíme starať o vrátenie výsledku funkcie pomocou „return. Pri zavolaní funkcie je vrátenou hodnotou posledný výrok. Napíšte túto funkciu do konzoly a skúste niečo takéto:

    (AddXY (AddXY 5 6) 4)