Předcházející |  | Další

### 11.2. Proměnné a funkce

Nyní, když víte, že každý výrok ve Scheme je uzavřen v kulatých závorkách a že jméno funkce či operátor je v závorkách uveden na prvním místě, je třeba se naučit a vytvářet proměnné a funkce. Začneme proměnnými.

#### 11.2.1. Deklarace proměnných

I když existuje více způsobů, jak promenné vytvářet, je preferována metoda pomocí konstrukce `let*`. Pokud znáte jiné programovací jazyky, je tato metoda ekvivalentní definici seznamu lokálních proměnných a rozsahu jejich platnosti. Jako příklad deklarujeme dvě proměnné, `a` a `b`, inicializované na hodnoty 1 a 2:

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

nebo na jedné řádce:

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

| Poznámka
Používáte-li Script-Fu konzoli, je třeba zadat vše na jednom řádku. V ostatních případech je však dobré používat přehledné odsazování pro zvýšeni čitelnosti kódu. Více si o tom povíme v části věnované bílým znakům.

Takto jsou deklarovány dvě lokální proměnné, `a` a `b`, inicializovány a je vypsán jejich součet.

#### 11.2.2. Co je lokální proměnná?

Jistě jste si všimli, že součet `(+ a b)` byl zapsán uvnitř závorek výrazu `let*`, nikoliv za nimi.

Je to tak, protože výrok `let*` definuje oblast skriptu, ve které jsou deklarované proměnné použitelné. Pokud by byl výraz `(+ a b)` až za výrazem `(let* ...)`, vznikla by chyba, protože deklarované proměnné jsou platné pouze uvnitř výroku `let*`; jedná se o tzv. lokální proměnné.

#### 11.2.3. Obecná syntaxe `let*`

Zápis výroku `let*` je obecně následující:

            (let* ( proměnné ) výrazy )

Proměnné jsou deklarovány v závorkách, např. `(a 2)`, a výrazy jsou jakékoliv platné Scheme výrazy. Nezapomeňte, že takto deklarované proměnné jsou platné pouze uvnitř výroku `let*` – jsou to lokální proměnné.

#### 11.2.4. Bílé znaky

Již dříve jsme poznamenali, že je dobré kód skriptů zpřehlednit použitím odsazování. Skutečně se to vyplatí. Ve Scheme není s odsazováním žádný problém; protože interpretr bílé znaky (tj. mezery, tabulátory, nové řádky a podobné) zcela ignoruje, je proto možné je pro formátování a zpřehlednění skriptu libovolně používat. Ve Script-Fu konzoli ale musíte psát vždy celý výraz na jeden řádek; vše mezi otevírací a uzavírací závorkou výrazu musí být ve Script-Fu konzoli na jednom řádku.

#### 11.2.5. Přiřazení nové hodnoty proměnné

Často je třeba změnit hodnotu již inicializované proměnné. Ke změně hodnoty proměnné se používá výrok `set!`:

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

Pokuste se odhadnout, co výše uvedený výrok dělá, a pak ho zadejte do Script-Fu konzole.

| Poznámka
Znak `\` značí pouze, že na jeho místě není konec řádky. Nezadávejte ho do konzoly, netiskněte na jeho místě Enter, prostě pokračujte další řádkou.

#### 11.2.6. Funkce

Nyní, když umíte pracovat s proměnnými, se podíváme na funkce. K deklaraci funkce slouží následující syntaxe:

            (define (jmeno
            seznam-parametru)
            vyrazy)

kde `jmeno` je jméno funkce, `seznam-parametru` je mezerami oddělený seznam jmen parametrů funkce a `vyrazy` je řada výrazů, které funkce při svém zavolání vykoná. Například:

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

Tato funkce se jmenuje `AddXY` a má dva parametry, proměnné `inX` a `inY`. Funkce oba své parametry sečte.

Pokud jste programovali v jiných imperativních jazycích (např. v C/C++, Javě, Pascalu atd.), možná jste si všimli, že definice funkce neobsahuje ve srovnání s jinými jazyky řadu položek.

- Parametry nemají žádné typy (nejsou deklarované jako řetězce, celá čísla apod.). Scheme je jazyk bez typové kontroly. To je velmi praktické a usnadňuje rychlé psaní skriptů.

- Navíc se také ve Scheme nemusíme zabývat vracením výsledku funkce, vrácenou hodnotou při zavolání funkce je poslední výrok. Zadejte výše uvedenou funkci do Script-Fu konzole a pak zkuste následující:

                  (AddXY (AddXY 5 6) 4)

Předcházející | Nahoru | Další
| Domů |