quarta-feira, 15 de outubro de 2008

Tcl/Tk

tcl.jpg Uma linguagem de script muito subestimada é Tcl/Tk.

Tcl significa Tool Command Language e foi criada por John Ousterhout para ser uma extensão de C, uma linguagem de agregação de componentes, mais ou menos como o Shell Script.

Tk é uma extensão gráfica para Tcl escrita em C. É um acrónimo para toolkit, nome comumente usado para frameworks gráficos. Em cada plataforma operacional, Tk oferece uma interface homogénia com o sistema de janelas. Outras linguagens também pode acessar a biblioteca Tk – como por exemplo Tkinter.

Tcl e Tk são de código aberto.

Vamos a alguns exemplos:
bash$ tclsh
% puts stdout {Olá Mundo!}
Olá Mundo!


Uma característica fortíssima de Tcl/Tk é que tudo são strings.

Cada token é uma string e strings não precisam de delimitadores, mas aspas (") e chaves ({ e }) podem ser usados como.

No exemplo acima, puts, stdout e {Olá Mundo!} são strings. A primeira string da linha referencia o comando a ser executado, no caso puts «coloca» uma string em um fluxo (stream).

A segunda string (stdout) indica qual o fluxo de saída, no caso a saída padrão.

A terceira string é aquela que será direcionada para a saída selecionada. No caso exibe Olá Mundo! na saída padrão.

Vamos a um exemplo um pouco mais complicado:
puts -nonewline stdout {Informe um número: }
gets stdin num
set dob [expr [set num] * 2]
puts stdout "O dobro é [set dob]"


Como já vimos, puts exibe uma string em uma saída, no caso novamente na saída padrão (stdout). A string -nonewline é um parâmetro que indica a puts para não inserir mudança de linha ao final.

O comando gets recebe uma string de uma entrada – no caso stdin, entrada padrão: o teclado – e a atribui a uma variável referenciada pela última string, num.

O comando set retorna o conteúdo de uma variável, se receber uma terceira string, atribui esta à variável e retorna.

Os colchetes executam o comando interno e tudo é substituído pela string retornada.

O comando expr trata todas as strings como uma expressão matemática, retornando o resultado.

Assim, [set num] retorna o valor da variável num, o expr pega esse valor de num, tratado como um número, e múltiplica por dois (2), retornando.

Daí os colchetes substituem novamente toda a expressão pelo valor retornado, ou seja, uma string representando o dobro do valor de num, então o set mais externo atribui essa valor à variável dob.

No final o último comando exibe na saída padrão a string, substituindo o que estiver entre colchetes. Como set dob retorna o valor de dob, acho que é óbvio o que é exibido.

Só que Tcl/Tk suporta um «apelido» para set, que é o cifrão ($), como em Shell e Perl (não como em PHP):
puts -nonewline stdout {Informe um número: }
gets stdin num
set dob [expr $num * 2]
puts stdout "O dobro é $dob"


Isso deixa o código bem mais limpo. =)

Outras extensões


Há ainda outras linguagens baseadas em Tcl/Tk que valem a pena serem citadas.

A primeira é [incr Tcl], uma variação orientada a objetos.

Outra é TclX (Tcl estendido), que, além de suportar todas os recursos de Tcl/Tk ainda suporta outros similares ao bash, como echo, loop e & (para execução paralela).

Finalizando


Este artigo é apenas um esboço. Outro mais completo pode ser encontrado nas Reflexões de Monte Gasppa e Giulia C..

[]'s
Cacilhas, La Batalema
blog comments powered by Disqus