[SP-pm] Hashes e arrays em Perl

Adriano Ferreira a.r.ferreira at gmail.com
Tue Jun 21 12:44:22 PDT 2011


2011/6/21 Tiago Peczenyj <tiago.peczenyj at gmail.com>

> Gostei muito deste artigo
>
> http://altreus.blogspot.com/2011/06/its-as-if-they-thought-it-through.html
>
> Entretanto tenho uma dúvida: em Java, por exemplo, eu tenho uma
> coleção de interfaces para determinar o funcionamento de Lists e Maps,
> etc, e varias implementacões. No caso de Maps eu tenho o HashMap, o
> LinkedHashMap, o TreeMap, etc, que apesar de implementar uma interface
> comum possuem conceitos bem diferentes.
>
> O Hash (%) do Perl possui uma implementação padrão. Qual é?
>
> Se eu quiser ter o mesmo comportamento que tenho em Java eu poderia
> utilizar Tie-Hashes com o meu algoritmo por trás. Encontrei alguns
> módulos no CPAN que fazem isso como o Tie::Hash::Sorted e o
> Tie::Hash::Cache::MRU mas o caminho é esse (usar Tie) ou seria mais
> interessante usar referencias a objetos e usar algum metodo get / set
> ?
>

São muitos os desenvolvedores que evitam os ties porque são (relativamente)
ineficientes por causa da mágica e dos métodos invocados.

Uma abordagem que já vi é a utilização das classes de implementação de ties
como objetos. Por exemplo,

pirl @> use Tie::IxHash

()
pirl @> $h = Tie::IxHash->new()

bless([{}, [], [], 0], "Tie::IxHash")
pirl @> $h->STORE('one', 1)

0
pirl @> $h->STORE('two', 2)

1
pirl @> $h->STORE('three', 3)

2
pirl @> $h->FETCH('two')

2
pirl @> $h->Values

(1, 2, 3)    # estes valores seguem a ordem de entrada no hash e não uma
ordem aleatória

É verdade que eu trapaceei acima e usei Values() que não faz parte da
interface para hash ties, mas a idéia é que você pode evitar o custo total
dos ties, usando apenas os objetos. É óbvio que isso só faz sentido quando a
implementação lhe traz benefícios que não podem ser conseguidos com hashes
puros (que são estupidamente rápidos se comparados com objetos).

Adriano
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110621/35afd472/attachment.html>


More information about the SaoPaulo-pm mailing list