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.