Histórico da Página
Disponível em: 1717.3.0.0 para a linguagem TL++TLPP
O recurso de namespace foi liberado na versão 17.3.0.0 e tem como benefício a melhor organização do código.
O nome do namespace pode ser um nome simples ou um nome que contenha "." como separador.
Importante ressaltar que todo nome de namespace iniciado com "tlpp." está reservado ao TLPP-COREtlppCore. Desse modo, qualquer tentativa de uso fora desse domínio, será bloqueada em tempo de compilação.
Uma vez utilizado o recurso namespace no 'main' da sua aplicação, é necessário que o explicite utilizando o separador "."
Exemplo: -p myNamespace.InitialFunction em vez de -p InitialFunction
Informações | ||||
---|---|---|---|---|
| ||||
Os namespaces iniciados por: "tlpp" e ou "core", são reservados para funções específicas da linguagem, sendo vetados para uso fora do ambiente da TOTVS ou para funções de usuário ! |
Funções dentro de namespace:
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
namespace exemplo main function testeNamespace conout("testeNamespace") testeNamespace2() //a função testeNamespace2 poderá ser chamada sem explicitar o namespace nem utilizar using porque estão no mesmo fonte return function testeNamespace2 conout("testeNamespace2") return |
Para chamar uma função que está declarada dentro de um namespace de um outro fonte é necessário que o explicite, o separador utilizado para isso é o "." conforme exemplo a seguir:
Bloco de código | ||||
---|---|---|---|---|
| ||||
user function exemplo2 exemplo.testeNamespace2() return |
Outra opção para chamar uma função que está declarada dentro de um namespace é utilizar a instrução "using namespace" conforme o exemplo a seguir:
Bloco de código | ||||
---|---|---|---|---|
| ||||
using namespace exemplo user function exemplo3 testeNamespace2() //nesse caso como não há uma função com esse nome neste fonte, ele irá executar a função que está no fonte exemplo1.tlpp porque o namespace exemplo está definido. return |
Classes dentro de namespace:
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
#include "protheus.ch" namespace exemplo2.1 class ClassWithNamespace method new() data dataI endclass method new() class ClassWithNamespace conout("construtor do ClassWithNamespace no namespace exemplo2") return self main function exemplo4() local obj := exemplo2.1.ClassWithNamespace():new() //nesse caso está explícito o namespace e o objeto será criado da classe ClassWithNamespace que está no namespace exemplo2 local obj2 := exemplo.ClassWithNamespace():new() //nesse caso está explícito o namespace e o objeto será criado da classe ClassWithNamespace que está no namespace exemplo local obj3 := ClassWithNamespace():new() //nesse caso não está explícito, mas há uma classe com esse nome definido nesse fonte, estão essa será utilizada. return |
Para utilizar uma classe que está declarada dentro de um namespace de um outro fonte é necessário que o explicite, o separador utilizado para isso é o "." conforme exemplo a seguir:
Bloco de código | ||||
---|---|---|---|---|
| ||||
user function exemplo5() Local o1 := exemplo2.1.ClassWithNamespace():New() Return |
Outra opção para utilizar uma classe que está declarada dentro de um namespace de um outro fonte é utilizar a instrução "using namespace" conforme o exemplo a seguir:
Bloco de código | ||||
---|---|---|---|---|
| ||||
using namespace exemplo2.1 user function exemplo6() Local o1 := ClassWithNamespace():New() Return |