Page tree
Skip to end of metadata
Go to start of metadata

Disponível em: 17.3.0.0 para a linguagem TL++

O recurso de namespace foi liberado na versão 17.3.0.0 e tem como benefício a melhor organização do código.
O nome do namespace pode ser um nome simples ou um nome que contenha "." como separador.

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

Funções dentro de namespace:

Exemplo:

exemplo1.tlpp
namespace exemplo

main function testeNamespace
	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:

exemplo2.tlpp
user function exemplo2
 exemplo.testeNamespace2()
return

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:

exemplo3.tlpp
using namespace exemplo
user function exemplo3
  testeNamespace2() //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:

exemplo4.tlpp
#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:

exemplo5.tlpp
user function exemplo5()
 Local o1 := exemplo2.1.ClassWithNamespace():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:

exemplo6.tlpp
using namespace exemplo2.1
user function exemplo6()
 Local o1 := ClassWithNamespace():New()
Return

  • No labels