BlackTDN Search

sexta-feira, 20 de abril de 2012

BlackTDN :: Tips & Tricks : Otimizando aScan e aEval

tips-tricks

Pela minha experiência, sempre que vejo um fonte com as funções aScan e aEval elas estão escritas da seguinte forma:

aScan

aEval

nAT := aScan( aArr , { |x| x == y } )

aEval( aArr , { |x| aAdd(y,x) } )

Vamos observar, segundo o TDN, os parâmetros formais para cada uma dessas funções.

Função: aScan

Executa um bloco de código para cada elemento de um array.

aScan ( < aArray>, < ExpProcura>, [ nInicio], [ nQuant ] ) --> nRet
Nome Tipo Descrição Obrigatório Referência
aArray Vetor Indica o array a ser avaliado. Sim Não
ExpProcura Qualquer

Indica a expressão de busca. Para um array de dimensão simples, pode ser colocado diretamente um valor a ser procurado. Para uma busca mais complexa ou para uma busca em array muti-dimensional, deve ser especificado um bloco de código.

Sim Não
nInicio Numérico

Indica a partir de qual elemento será realizada busca. Por padrão a pesquisa inicia no elemento 1.

Não Não
nQuant Numérico

Indica por quantos elementos serão considerados na operação de busca. Caso não especificado, todos os elementos do array a partir da posição inicial de busca serão considerados.

Não Não

Função: aEVal

Percorre um array procurando por um valor especificado. Pode ser especificado um valor a ser buscado, ou pode ser informada uma condição de busca através de um bloco de código.

aEVal ( < aArray>, < bBloco>, [ nInicio], [ nQuant ] ) --> NIL
Nome Tipo Descrição Obrigatório Referência
aArray Vetor Indica o array a ser avaliado. Sim Não
bBloco Bloco de Código

Indica o bloco de código que será executado para cada elemento encontrado.

Sim Não
nInicio Numérico

Indica o elemento inicial. Caso não seja especificado, o padrão assumido será o elemento um.

Não Não
nQuant Numérico

Indica a quantidade de elementos que serão processados a partir do parâmetro nInicio. Caso não seja especificado, o padrão será todos os elementos do array.

Não Não

Normalmente os parâmetros nInicio e nQuant são omitidos mas, se bem utilizados poderão otimizar a pesquisa conforme exemplo abaixo.

Utilizarei fragmentos do código de GAME 15 para exemplificar.

aScan Exemplo de Otimização
aScan Exemplo de Otimização
aScan Exemplo de Otimização
aScan Exemplo de Otimização

 

magic_tips_and_tricks

Observem que na revisão anterior (em rosa) não utilizava, em aScan, os parâmetros nInico (nBL) e nQuant (nEL) forçando que a pesquisa sempre iniciasse em 1 e finalizasse, caso não encontrasse o elemento da procura, no último elemento do array. Um desperdício uma vez que sabemos o intervalo e o número de elementos para a pesquisa. Dessa forma, ao passarmos os valores para nInicio (nBL) e nQuant (nEL), tornamos a pesquisa em aScan muito mais otimizada.

O mesmo poderemos dizer para aEval(). Só que no caso de aEval desde a versão original de GAME 15 os parâmetros nInicio (nBL) e nQuant (nEL) foram passados. Oras, se sei a partir e quanto avaliar, porque avaliar o Array inteiro.

Observe:

aEval Exemplo de Otimização

Com isso restrinjo o intervalo para avaliação do Bloco de código tornando-a muito mais rápida, ou seja, otimizada.

Em resumo, utilizem os parâmetros nInicio e nQuant em aScan e aEval para otimizar o processo de pesquisa e avaliação.

Fica a dica.

[]s
иαldσ dj

Nenhum comentário:

Postar um comentário