Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 4 Próxima »

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 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.
O nome do namespace pode ser um nome simples ou um nome que contenha "." como separador.

Funções dentro de namespace:

Exemplo:

namespace exemplodenamespace
user 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("funcaoComMaisDeDez")
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 usandoNamespace
 exemplodenamespace.u_nspace()
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:

namespace exemplo.de.namespace
#include 'protheus.ch'
CLASS ClasseComNomeGrande1
 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")
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 tstNomeGrande()
 Local o1 := exemplo.de.namespace.ClasseComNomeGrande1():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.


  • Sem rótulos