Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Resolvendo o Desafio "Palindrome Number" do LeetCode com XBase e TLPP

_Créditos das imagens: ChatGPT_ ### LeetCode :: **Resolvendo o Desafio "Palindrome Number" do LeetCode com XBase e TLPP** No mundo da programação, os desafios do LeetCode são uma excelente maneira de aprimorar nossas habilidades de codificação. Um desses é o desafio [**Palindrome Number** (Número Palíndromo)](https://leetcode.com/problems/palindrome-number/description/). Neste artigo, vamos explorar como resolvemos esse desafio utilizando XBase e TLPP (linguagens que possuem um poderoso conjunto de ferramentas para o desenvolvimento de soluções rápidas e eficientes). #### Descrição do Desafio O problema **Palindrome Number** exige que verifiquemos se um número inteiro é um palíndromo. Ou seja, o número deve ser lido da mesma forma de trás para frente como é lido da frente para trás. Exemplos de números palíndromos incluem: 121, 12321, etc. Já números como 123, 10, e -121 não são palíndromos, pois sua leitura invertida não é igual ao número original. A ideia é criar uma f...

Protheus :: Obtenha os parâmetros formais com GetFuncPrm


Utilizando GetFuncPrm( cFunction ) para retornar os parâmetros de uma função em Advpl.

Se você tem dúvidas sobre quais parâmetros formais uma função em Advpl possui, utilize GetFuncPrm( cFunction ) para obtê-los.

GetFuncPrm() retorna um array com todos os parâmetros formais da função.

Ex.:

Local aPrmFunc := {}

IF FindFunction( "SomaHoras" )
aPrmFunc := GetFuncPrm( "SomaHoras" )
aEval( aPrmFunc , { |cPrm| ConOut( cPrm ) } ) //-> nHr1 , nHr2
EndIF

O problema é que GetFuncPrm() só retorna os parâmetros de funções em Advpl, não retorna as "Internal Functions". Por exempo, não posso utilizar GetFuncPrm() para retornar os parâmetros da função aEval(), pois aEval() não está escrita em Advpl mas sim em C++ e em função disso, não consta na pilha de funções Advpl.

Na realidade, quase toda função que possa ser localizada por FindFunction( cFunction ) pode ter os seus parâmetros formais retornados pela GetFuncPrm().

Além de não retornar os parâmetros de "Internal Functions" GetFuncPrm() também não retorna os parâmetros de "Métodos de Classes" escritas em Advpl.

Outro problema de GetFuncPrm() é que ela só retorna os parâmetros das funções, não o que deve ser passado a eles, aí vai da experiência de cada um e de como os parâmetros formais foram declarados. No nosso exemplo sei que SomaHoras( nHr1 , nHr2 ) recebe dois parâmetros do tipo numérico, e pela descrição podemos inferir que temos que passar valores em horas. Mas pode ocorrer de GetFuncPrm() retornar parâmetros "esdrúxulos" como em:

Local aPrmFunc := {}

IF FindFunction( "EmpOpenFile" )
aPrmFunc := GetFuncPrm( "EmpOpenFile" )
aEval( aPrmFunc , { |cPrm| ConOut( cPrm ) } ) //-> cExp1,cExp2,nExp3,lExp4,cExp5,cExp6
EndIF

Nesse exemplo receberemos os seguintes parâmetros formais : cExp1, cExp2, nExp3, lExp4, cExp5, cExp6. Mas o que eles significam? Apenas podemos identificar o seu "Tipo" cExp1, cExp2, nExp3, cExp5, cExp6 como caracteres e lExp4 como lógico. (É nem tudo são flores). Ainda bem que sei o que passar para EmpOpenFile().

EmpOpenFile() é uma função em Advpl utilizada para abrir Tabelas de outra empresa e seus parâmetros formais, traduzidos, são:

EmpOpenFile( cNewAlias , cAlias , nOrder , lForceOpen , cEmpresa , cModo ) -> lOpened

onde:

cNewAlias: Alias que sera atribuido a Nova Tabela
cAlias: Alias da Tabela Para Pesquisa e Comparação
nOrder : Numero do Indice
lForceOpen: DEFAULT .T., se força a abertura da nova Tabela
cEmpresa: Código da Empresa
cModo: Modo de Acesso do SX2 da nova Tabela (retornado por referência).


Comentários

Postar um comentário

Postagens mais visitadas