3. Um tutorial de Script-Fu

Neste treinamento, nós mostraremos a você os fundamentos da linguagem Scheme necessários para fazer uso do Script-Fu, e então vamos construir um script prático que você poderá agregar ao seu arsenal de scripts. O script vai pedir um texto ao usuário, então criará uma imagem do tamanho exato daquele texto. Então nós melhoraremos o script para deixar um pouco de espaço em volta desse texto, e concluiremos com algumas sugestões de formas para melhorar seu conhecimento em Script-fu.

[Nota] Nota

This section was adapted from a tutorial written for the GIMP 1 User Manual by Mike Terry.

3.1. Familiarizando-se com Scheme

3.1.1. Start with Scheme

Scheme is a dialect of the Lisp family of programming languages. GIMP uses TinyScheme, which is a lightweight interpreter of a subset of the so-called R5RS standard.

A primeira coisa a aprender é

Todo comando em Scheme é colocado dentro de parênteses ( ).

A segunda coisa que você precisa saber é:

O nome da função ou operador é sempre o primeiro item dentro dos parênteses, e o restante dos items são parâmetros para aquela função.

Entretanto, nem tudo que está entre parênteses é uma função — eles também podem conter itens de uma lista — mas vamos ver isso depois. Essa notação normalmente é chamada de notação em prefixo, por que a função prefixa todas as outras coisas. Se você estiver familiarizado com a notação pós-fixa, ou tiver uma calculadora que usa a Notação Polonesa Reversa (como a maioria das calculadoras da HP), você não deve ter nenhum problema em se adaptar para formular as expressões em Scheme.

A terceira coisa a saber é:

Operadores matemáticos também são considerados funções, e portanto são colocados primeiro quando se estiver escrevendo expressões matemáticas.

Isso segue-se logicamente da notação em prefixo que acabamos de mencionar.

3.1.2. Exemplos de notação em prefixada, tradicional ("in-fixa") e pós-fixada

Aqui seguem alguns exemplos rápidos mostrando as diferenças entre as notações prefixadas, tradicional, e pós fixadas . Vamos adicionar os números 2 e 23:

  • Notação pré-fixada: + 2 23 (da forma que o Scheme pode entender)

  • Notação tradicional ("in-fixa"): 2 + 23 (a forma como nós normalmente escrevemos a operação, e que é usada em linguagens como C e Python)

  • Notação pós-fixada: 2 23 + (a forma como muitas calculadoras da HP e linguagens como Forth e Postscript querem)

3.1.3. Prática do Scheme

In GIMP, select FiltersDevelopmentScript-FuScript-Fu Console from the main menu. This will start up the Script-Fu Console window, which allows us to work interactively in Scheme.

3.1.4. A janela de terminal do Script-fu

At the bottom of this window is a text entry field for commands. Here, we can test out simple Scheme commands interactively. Let's start out easy, and add some numbers:

(+ 3 5)

Ao digitar isso e apertar Enter, a resposta esperada, 8, aparece na parte central da janela.

Figura 13.1. Uso do terminal de Script-fu

Uso do terminal de Script-fu

The + function can take more arguments, so we can add more than one number:

(+ 3 5 6)

Isso também dá a resposta esperada: 14.

Até aqui, tudo bem — nós digitamos um comando de Schema e ele é executado imediatamente no terminal do Script-fu. Agora, uma palavra de precaução...

3.1.5. Preste atenção em parênteses extras

Se você é como eu, você está acostumado a usar parênteses adicionais sempre que quiser, como quando você está escrevendo uma equação complexa, e você quer separar as partes com parênteses para torna-la mais clara quando for ler a mesma de volta. Em Scheme, você tem que tomar cuidado e não inserir essas parênteses extras de forma incorreta. Por exemplo, vamos dizer que queremos adicionar 3 ao resultado de adicionar 5 e 6 juntos:

3 + (5 + 6) + 7 = ?

Sabendo que o operador + pode adicionar uma lista de números, você pode ser tentado a converter essa expressão para:

(+ 3 (5 6) 7)

Entretanto, isso é incorreto — lembre-se, todo comando em Scheme começa e termina com parênteses, portanto, o interpretador de Scheme vai achar que estamos tentando chamar uma função de nome 5 no segundo grupo de parênteses, ao invés de somar esses dois números antes de adiciona-los ao três.

A forma correta de escrever a expressão acima seria:

(+ 3 (+ 5 6) 7)

3.1.6. Certifique-se de que o espaçamento está correto também!

Se você está familiarizado com outras linguagens de programação (C/C++, Perl ou Java você sabe que não precisa de espaço em branco em volta de operadores matemáticos para que eles formem uma expressão apropriada)

        3+5, 3 +5, 3+ 5
      

Todas essas formas são aceitas nas linguagens com sintaxe derivada de C. Entretanto, o mesmo não é verdade para Scheme. Você precisa ter um espaço depois de um operador matemático (ou qualquer outro operador ou nome de função) em Scheme para que o mesmo seja corretamente interpretado pelo interpretador de Scheme.

Pratique um pouco com expressões matemáticas simples no terminal do Script-Fu, até que você esteja confortável com esses conceitos iniciais.