BlackTDN Search

terça-feira, 13 de dezembro de 2011

Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL (Making-of :: operador de Hash)

  1. Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL ;

  2. Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL (Round 2, Figth!) ; e

  3. Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL (You Win!)

Os “Bastidores da série: Protheus :: Advpl :: Duelo de Titãs :: Harbour x ADVPL”, irão revelar o poder por trás do pré-processador ADVPL. Nosso astro Principal: “ptxlsxml.ch”.

O Operador de Hash (ao som de Ice T “Colors”).

Antes de mais nada, para que tudo fosse possível, foi necessária uma “pequena” adaptação no código original do Harbour pois o operador de Hash => não é suportado pela linguagem ADVPL. O operador de Hash do Harbour, a exemplo do operador de Array {} (ADVPL/Harbour) tem uma função equivalente.

Para o operador {} temos a função Array() e, para =>, do Harbour, teremos hb_hash(). Sem isso seria impossível a utilização do código Harbour em ADVPL.

As alterações em relação ao operador => foram:

Para o Programa: xlsxml.prg

image

image

Para o programa: xlsxml_s.prg

image

 image

image

image

e, Para o Programa: xlsxml_y.prg

image

image

image 

image

Mas afinal, o que é Hash?

Segundo a WikPédia podemos definir  Hash ou “Vetor associativo” como:

Um vetor associativo é uma estrutura de dados composta de um conjunto não-ordenado de itens formados por um par chave e valor, no qual cada chave possui um valor associado. Essas chaves são definidas pelo usuário e devem ser armazenadas na estrutura. O relacionamento existente entre as chaves e seus respectivos valores é chamado de mapeamento, pois para buscar um valor utiliza-se a chave como índice de busca. Na implementação de um vetor associativo, os elementos são armazenados e recuperados com funções de dispersão. Pode-se buscar o valor de um elemento pela chave e também verificar se existe algum elemento relacionado àquela chave.

A principal vantagem existente na utilização de vetores associativos está na facilidade de realização de buscas por valores. Porém, não é tão eficiente quanto um vetor comum quando todos os elementos do vetor devem ser processados.

A relação entre uma chave e seu valor as vezes é chamada de mapeamento ou ligação. Por exemplo, se o valor associado à chave "bob" é 7, dizemos que nosso vetor mapeia "bob" para 7. Vetores associativos estão intimamente relacionados ao conceito matemático de função bijetora um domínio finito. Como conseqüência, um uso comum e importante de vetores associativos é em memorização.

Onde encontramos essa estrutura/formação:

Em arquivos INI, XML, HTML, etc.

Bem, o maior trabalho na compatibilização do código Harbour com ADVPL, foi, de fato, Hash. Tive que simulá-lo e, com certeza, não o fiz de forma otimizada. Reaproveitei, por suas características, a classe TFINI; que evoluiu a séria candidata ao controle de Hash e passou a denominar-se THash donde TINI passou a derivar. É mister afirmar que, com um pouquinho de estudo, poderemos implementar Hash de forma intuitiva, nativa e, por que não dizer, descente. Mas, isso é uma outra história.

Que venha o Pré-Processador.

[]s

иαldσ dj

Um comentário:

  1. Fala ae Grande Mestre Lee!!!! Hehehe.. é impressao ou realmente vc esta fodao nos ultimos posts??? Caraca... esse com certeza esta no top10, pena q nem todos que acompanham o blog ou trabalham com Microsiga/Advpl no dia a dia entenderam todo processo e a grande obra de arte por tras de tudo isso... Mas de toda forma que sirva antes de tudo como grande exemplo para que o conhecimento nunca fica engessado como muitos acabam fazendo no decorrer de tempo! Parabens e mais uma vez sem palavras Mestrao!!! Grande abraço!

    ResponderExcluir