Histórico da Página
Estado | ||||||
---|---|---|---|---|---|---|
|
O recurso de namespace foi liberado na versão 17.3.0.0 para a linguagem
Inclusão de trecho | ||||||
---|---|---|---|---|---|---|
|
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 myNamespace.InitialFunction em vez de -p InitialFunction
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
|
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
|