### 3.2. Переменные и функции

Теперь, когда мы знаем, что каждый оператор Scheme заключается в скобки, и что название функции или оператора идёт первым, нужно научиться, как создавать и использовать переменные и как создавать и использовать функции. Начнём с переменных.

#### 3.2.1. Декларирование переменных

Хотя есть разные методы декларации переменных, предпочтительный метод использует оператор let*. Если вы знакомы с другими языками программирования, этот оператор равносилен декларированию списка локальных переменных с пределом их применимости. Например, чтобы декларировать две переменные a и b со значениями 1 и 2, нужно ввести:

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

или на одной строке:

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

| Примечание
Это всё следует поместить на одной строке при использовании окна консоли. В общем, однако, лучше придерживаться показанной схемы отступа; тогда сценарии легче читать. Мы ещё поговорим об этом в разделе о пробелах.

Здесь декларируются две локальные переменные, a и b, инициализируются, а затем выводится их сумма.

#### 3.2.2. Что такое локальная переменная?

Вы могли заметить, что мы написали сложение `(+ a b)` внутри скобок оператора `let*`, а не после.

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. Общий синтаксис `let*`

Общая форма оператора `let*` такова:

            (let* ( переменные )
              выражения )

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. Пробел

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. Присвоение нового значения переменной

Если у переменной уже есть значение и его нужно поменять, используйте оператор `set!`:

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

Введите это выражение в окно консоли и посмотрите на результат. Сначала переменной theNum присваивается значение 10, и затем эта переменная складывается с самой же, и результат суммы выдаётся как результат всего выражения, т. е. 20.

#### 3.2.6. Функции

Теперь, когда вы понимаете переменные, возьмёмся за функции. Функции декларируются следующим образом:

            (define
               (
                  название
                  список-параметров
               )
               выражения
            )

где функции даётся `название`, указываются названия параметров в `списке-параметров`, отделённые друг от друга пробелом, и потом следует список `выражений`, которые выполняются при вызове этой функции. Например:

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

`AddXY` — название функции, а `inX` и `inY` — переменные. Эта функции берёт эти две переменные и складывает их.

Если вы программировали на императивных языках (как C/C++, Java, Pascal, и т. д.), то, наверное, заметили, что у декларации функции в Scheme что-то отсутствует.

- Во-первых, у параметров нет «типов» (т. е. мы не декларировали как, например, строки или числа). Scheme — бестиповой язык. Это помогает в быстрой разработке сценариев.

- 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. Инструкция по Script-Fu |  | 3.3. Списки, списки и ещё раз списки

Report a bug in GIMP Сообщите об ошибке в нашем баг-трекере