Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Estado
subtletrue
colourGreen
titletlpp - language

Disponível em: 131227A NG 2.2.0

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
TLPP
TLPP
nopaneltrue
 e tem como benefício a melhor organização do código e o aumento da quantidade de caracteres nos nomes das funções e em nomes de variáveis, a limitação muda de 10 para 255 quando utilizado..

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

Inclusão de trecho
TLPP
TLPP
nopaneltrue
 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
titleexemplo1.tlpp
linenumberstrue
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
titleexemplo2.tlpp
linenumberstrue
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:

code
Bloco de código
titleexemplo3.tlpp
linenumberstrue
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
titleexemplo4.tlpp
linenumberstrue
#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
titleexemplo5.tlpp
linenumberstrue
user function tstNomeGrandeexemplo5()
 Local o1 := exemploexemplo2.de1.namespace.ClasseComNomeGrande1ClassWithNamespace():New()
 o1:MetodoComNomeGrande1()
 o1:MetodoComNomeGrande2()
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.
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
titleexemplo6.tlpp
linenumberstrue
using namespace exemplo2.1
user function exemplo6()
 Local o1 := ClassWithNamespace():New()
Return