O recurso de namespace foi liberado na versão 17.3.0.0 para a linguagem e tem como benefício a melhor organização do código.
Observações
Exemplo: -p myNamespace.InitialFunction em vez de -p InitialFunction
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 ! |
Classes em |
#include "totvs.ch" namespace exemplo class ClassWithNamespace public method new() data dataI endclass method new() class ClassWithNamespace conout("construtor do ClassWithNamespace no namespace exemplo") return self user function testeNamespace conout("testeNamespace") u_testeNamespace2() //a função testeNamespace2 poderá ser chamada sem explicitar o namespace nem utilizar using porque estão no mesmo fonte return user 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:
user function exemplo2 exemplo.u_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:
using namespace exemplo user function exemplo3 u_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 |
#include "protheus.ch" namespace exemplo2.1 class ClassWithNamespace public method new() data dataI endclass method new() class ClassWithNamespace conout("construtor do ClassWithNamespace no namespace exemplo2") return self user 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:
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:
using namespace exemplo2.1 user function exemplo6() Local o1 := ClassWithNamespace():New() Return |