Histórico da Página
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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
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:
Bloco de código | ||
---|---|---|
| ||
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.