[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