### 3.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.

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

Although there are a couple of different methods for declaring variables, the preferred method is to use the let* construct. If you're familiar with other programming languages, this construct is equivalent to defining a list of local variables and a scope in which they're active. As an example, to declare two variables, a and b, initialized to 1 and 2, respectively, you'd write:

            (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.

#### 3.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.

This is because the `let*` statement defines an area in your script in which the declared variables are usable; if you type the `(+ a b)` statement after the `(let* )` statement, you'll get an error, because the declared variables are only valid within the context of the `let*` statement; they are what programmers call local variables.

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

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

            (let* ( variables )
              expressions )

where variables are declared within parens, e.g., `(a 2)`, and expressions are any valid Scheme expressions. Remember that the variables declared here are only valid within the `let*` statement they're local variables.

#### 3.2.4. Bílé znaky

Previously, we mentioned the fact that you'll probably want to use indentation to help clarify and organize your scripts. This is a good policy to adopt, and is not a problem in Scheme white space is ignored by the Scheme interpreter, and can thus be liberally applied to help clarify and organize the code within a script. However, if you're working in Script-Fu's Console window, you'll have to enter an entire expression on one line; that is, everything between the opening and closing parens of an expression must come on one line in the Script-Fu Console window.

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

Once you've initialized a variable, you might need to change its value later on in the script. Use the `set!` statement to change the variable's value:

            (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.

#### 3.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
               (
                  name
                  param-list
               )
               expressions
            )

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.

- First, notice that the parameters don't have any „types“ (that is, we didn't declare them as strings, or integers, etc.). Scheme is a type-less language. This is handy and allows for quicker script writing.

- Second, notice that we don't need to worry about how to „return“ the result of our function the last statement is the value „returned“ when calling this function. Type the function into the console, then try something like:

      (AddXY (AddXY 5 6) 4)

3. Zasvěcení do Script-Fu |  | 3.3. Seznamy, seznamy a zase seznamy

Report a bug in GIMP Report a documentation error