<br><br><div class="gmail_quote">2011/6/21 Tiago Peczenyj <span dir="ltr"><<a href="mailto:tiago.peczenyj@gmail.com">tiago.peczenyj@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Gostei muito deste artigo<br>
<br>
<a href="http://altreus.blogspot.com/2011/06/its-as-if-they-thought-it-through.html" target="_blank">http://altreus.blogspot.com/2011/06/its-as-if-they-thought-it-through.html</a><br>
<br>
Entretanto tenho uma dúvida: em Java, por exemplo, eu tenho uma<br>
coleção de interfaces para determinar o funcionamento de Lists e Maps,<br>
etc, e varias implementacões. No caso de Maps eu tenho o HashMap, o<br>
LinkedHashMap, o TreeMap, etc, que apesar de implementar uma interface<br>
comum possuem conceitos bem diferentes.<br>
<br>
O Hash (%) do Perl possui uma implementação padrão. Qual é?<br>
<br>
Se eu quiser ter o mesmo comportamento que tenho em Java eu poderia<br>
utilizar Tie-Hashes com o meu algoritmo por trás. Encontrei alguns<br>
módulos no CPAN que fazem isso como o Tie::Hash::Sorted e o<br>
Tie::Hash::Cache::MRU mas o caminho é esse (usar Tie) ou seria mais<br>
interessante usar referencias a objetos e usar algum metodo get / set<br>
?<br></blockquote><div><br></div><div>São muitos os desenvolvedores que evitam os ties porque são (relativamente) ineficientes por causa da mágica e dos métodos invocados.</div><div><br></div><div>Uma abordagem que já vi é a utilização das classes de implementação de ties como objetos. Por exemplo,</div>
<div><br></div><div><div>pirl @> use Tie::IxHash                                                                                                 </div><div>()</div><div>pirl @> $h = Tie::IxHash->new()                                                                                         </div>
<div>bless([{}, [], [], 0], "Tie::IxHash")</div><div>pirl @> $h->STORE('one', 1)                                                                                             </div><div>0</div><div>pirl @> $h->STORE('two', 2)                                                                                             </div>
<div>1</div><div>pirl @> $h->STORE('three', 3)                                                                                           </div><div>2</div><div>pirl @> $h->FETCH('two')                                                                                                </div>
<div>2</div><div>pirl @> $h->Values                                                                                                      </div><div>(1, 2, 3)    # estes valores seguem a ordem de entrada no hash e não uma ordem aleatória</div>
</div><div><br></div><div>É 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).</div>
<div><br></div><div>Adriano</div><div><br></div><div><br></div></div>