Histórico da Página
Disponível em: 17.3.0.0 para a linguagem TLPP
O recurso de namespace foi liberado na versão 17.3.0.0 para a linguagem TLPP e tem como benefício a melhor organização do código.
Observações
- 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 tlppCore. 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 p myNamespace.InitialFunction em vez de -p InitialFunction
Informações | |
---|---|
icon | false | title | Restrição Namespace
Aviso | |
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 ! |
Dica |
---|
Classes em TLPP que herdam de classe com namespace precisam utilizar o namespace na declaração da classe ou utilizar o namespace no programa que executa a chamada da classe. |
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 |