Tcl/Tk
Curso On-Line de Programação

Trabalhando com Namespaces

Namespaces oferecem uma forma eficiente de encapsular variáveis e procedimentos, especialmente no caso de bibliotecas.

Um namespace é um espaço nomeado, dentro do qual podemos definir nossos procedimentos e variáveis sem poluir o espaço global com dezenas de definições, muitas vezes conflitantes.

De fato, tudo hoje, em Tcl é definido em termos de namespaces. Variáveis globais estão contidas no namespace global e a maior parte das extensões são definidas dentro de um namespace com o mesmo nome da extensão. Veja um exemplo: uma biblioteca matemática chamada Math, poderá definir seus procedimentos em um namespace Math e nos referiríamos a uma procedure quadradro de x, x2, como Math::x2.

Os principais comandos para tratamento de namespaces são:
 

Comando Descrição
namespace children Retorna uma lista de todos os namespaces filhos do namespace dado, que correspondem ao padrão fornecido.
namespace code Retorna um novo script, que ao ser avaliado, faz com que o script dado seja executado no namespace atual.
namespace current Retorna o nome completo do namespace dado.
namespace delete Apaga cada um dos namespaces dados.
namespace eval Ativa o namespace e avalia a concatenação dos argumentos em seu interior.
namespace export Adiciona os comandos que correspondem ao padrão dado, à lista de comandos exportados. A opção -clear faz com que a lista anterior seja apagada e uma nova seja criada.
namespace forget Remove os comandos importados, que correspondem ao padrão fornecido, do namespace atual.
namespace import Importa os comandos que correspondem ao padrão dado, para o namespace atual. A opção -force substitui os comandos existentes.
namespace inscope Ativa o namespace dado e avalia, em seu interior, a concatenação dos argumentos dados.
namespace origin Retorna o caminho completo do comando dado.
namespace parent Retorna o caminho completo do namespace pai do namespace dado.
namespace qualifiers Retorna qualquer qualificador de namespace existente na string dada.
namespace tail Retorna o nome simples, sem o qualificador de namespace a partir da string dada.
namespace which Retorna o caminho completo de um comando dado, incluindo o namespace, se a opção -command for utilizada, ou. o caminho completo de uma variável dada, se a opção -variable for utilizada.
variable Cria uma ou mais variáveis, no namespace atual, opcionalmente, atribuindo um valor a ela.

Exemplo

# Define o pacote
package provide Math 1.0

# Cria o namespace
namespace eval Math {

    # Define os comandos a serem exportados( neste caso, todos )
    namespace export *
}

# Cria uma procedure no interior do namespace( neste caso, x2 )
proc Math::x2 {value} {
    set ret "[expr $value * $value]"
    return $ret
}


Neste caso, a procedure x2 poderá ser acessada de duas formas:

package require Math
namespace import Math::*
puts [x2 4]


Ou

package require Math
puts [Math::x2 4]


Para uma descrição detalhada de todas as funções para tratamento de namespaces, consulte a documentação on-line, ou o Tcl/Tk Reference Guide, ou ainda o Tcl/Tk Electronic Reference.

Para maiores informações envie e-mail para info@souzamonteiro.com.


http://www.souzamonteiro.com
info@souzamonteiro.com

Copyright(C) 2000 by Roberto Luiz Souza Monteiro