Histórico da Página
Estado | ||||||
---|---|---|---|---|---|---|
|
O recurso de namespace foi liberado na versão 131227A 2.2.0 e tem como benefícios 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 exemplodenamespaceexemplo usermain function nspace() local variavelComMaisDeDezCaracteres local variavelComMaisDeDezCaracteres2 variavelComMaisDeDezCaracteres := "fkdjsfkldjssfldkj" variavelComMaisDeDezCaracteres2 := "6541654654654" conout(variavelComMaisDeDezCaracteres) conout(variavelComMaisDeDezCaracteres2) conout("namespace1") u_funcaoComMaisDeDezCaracteres() u_funcaoComMaisDeDez() u_funcaoComMais() return user function funcaoComMaisDeDezCaracteres() conout("funcaoComMaisDeDezCaracteres") return user function funcaoComMais() conout("funcaoComMais") return user function funcaoComMaisDeDez() conout("funcaoComMaisDeDeztesteNamespace 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 usandoNamespaceexemplo2 exemplodenamespaceexemplo.u_nspacetesteNamespace2() return |
Classes dentro de namespace:
Todas as classes definidas dentro de um fonte com namespace tem como limitação 255 caracteres para nome de classe, de método e de atributo.
Exemplo:
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.de.namespace #include 'protheus.ch' CLASS ClasseComNomeGrande1user function exemplo3 METHOD New() METHOD MetodoComNomeGrande1() METHOD MetodoComNomeGrande2() data euGostoDeTerDadosComMaisDeDezCaracteres1 data euGostoDeTerDadosComMaisDeDezCaracteres2 data euGostoDeTerDadosComMaisDeDezCaracteres3 ENDCLASS METHOD New() CLASS ClasseComNomeGrande1 self:euGostoDeTerDadosComMaisDeDezCaracteres1 := "1111" self:euGostoDeTerDadosComMaisDeDezCaracteres2 := "2222" self:euGostoDeTerDadosComMaisDeDezCaracteres3 := "3333" Return METHOD MetodoComNomeGrande1() CLASS ClasseComNomeGrande1 conout("Classe1 MetodoComNomeGrande1") conout(self:euGostoDeTerDadosComMaisDeDezCaracteres1) conout(self:euGostoDeTerDadosComMaisDeDezCaracteres2) conout(self:euGostoDeTerDadosComMaisDeDezCaracteres3) Return METHOD MetodoComNomeGrande2() CLASS ClasseComNomeGrande1 conout("Classe1 MetodoComNomeGrande2") ReturntesteNamespace2() //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 tstNomeGrandeexemplo5() Local o1 := exemploexemplo2.de1.namespace.ClasseComNomeGrande1ClassWithNamespace():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 o1:MetodoComNomeGrande1user function exemplo6() Local o1:MetodoComNomeGrande2 := ClassWithNamespace():New() Return |
Observações:
Variáveis públicas com mais de 10 caracteres ao serem acessadas por outro fonte, no outro fonte a busca permanece considerando 10 caracteres.
|