### 3.2. Variables i funcions

Ara que sabem que totes les declaracions en Scheme estan entre parèntesis, i que el nom de la funció o operador va primer, hem d'aprendre a crear i utilitzar variables, i com crear i utilitzar funcions. Començarem amb les variables.

#### 3.2.1. Declaració de variables

Encara que hi ha un parell de mètodes diferents per a declarar variables, el preferit és l'ús de l'estructura let*. Si esteu familiaritzats amb altres llenguatges de programació, aquesta construcció és equivalent a definir una llista de variables locals i una extensió en la qual estan actives. Com a exemple, per a declarar dues variables, a i b, inicialitzades respectivament a 1 i 2, escriviu:

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

o, en una línia:

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

| Nota
Haureu de posar tot això en una línia si esteu utilitzant la finestra de la consola. Tanmateix, voldreu adoptar una pràctica similar de sagnat per a ajudar a fer els vostres scripts més llegibles. Parlarem una mica més d'això en la secció sobre l'espai blanc.

Això declara dues variables locals, a i b, inicialitzades, que mostren la suma de les dues variables.

#### 3.2.2. Què és una variable local?

Notareu que escrivim la suma `(+ a b)` dins el parèntesi de l'expressió `let*`, i no després d'ella.

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. La sintaxi general del `let*`

La forma general d'una declaració `let*` és:

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

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. Assigna un valor nou a una variable

Una vegada que heu iniciat una variable, podríeu necessitar canviar aquest valor més endavant en l'script. Utilitzeu la declaració `set!` per a canviar el valor de la variable:

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

Intenteu endevinar què farà la declaració, llavors, introduïu-la en la consola de Script-Fu.

#### 3.2.6. Funcions

Ara que entenem les variables, treballem amb algunes funcions. Declareu una funció amb la següent sintaxi:

            (define
               (
                  name
                  param-list
               )
               expressions
            )

on el `nom` és el nom assignat a aquesta funció, `llista de paràmetres` és una llista limitada de noms de paràmetres, i `expressions` és una sèrie d'expressions que la funció executa quan la crida. Per exemple:

    (defineix (AddXY inX inY) (+ inX inY) )

`AddXY` és el nom de la funció, `inX` i `inY` són les variables. Aquesta funció agafa els dos paràmetres i els suma.

Si heu programat en un altre llenguatge (com C/C++, Java, Pascal, etc.), haureu notat un parell de coses que no hi són en la definició d'aquesta funció en comparació amb altres llenguatges de programació.

- Primer, observeu que els paràmetres no tenen un «tipus» (és a dir, no es declaren com a cadenes, o enters, etc.). Scheme és un llenguatge sense tipus. Això és pràctic i permet una escriptura més ràpida dels scripts.

- 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. Programa d'aprenentatge de l'Script-Fu |  | 3.3. Llistes, llistes i més llistes

Report a bug in GIMP Informa d'un error de documentació