[SP-pm] Duvida primaria

Eden Cardim edencardim at gmail.com
Thu Oct 21 10:32:30 PDT 2010


2010/10/21 Nilson Santos Figueiredo Jr. <acid06 em gmail.com>:
> 2010/10/21 Eden Cardim <edencardim em gmail.com>:
>> Nesse caso o given/when perde mais feio ainda porque pode-se aplicar
>> currying e não fazer lookup algum durante a construção da closure, e
>> isso porque o switch só tem dois casos de branching nesse seu exemplo,
>> com mais casos é mais feio ainda. Além de que a versão com currying tem
>> a vantagem de que pode-se invocar $dispatch->{$style}->($content) de
>> qualquer ponto do código sem ter que passar inutilmente pela
>> verificação. A subrotina gerada vai ter um overhead um pouco maior do
>> que a versão gerada com given/when porque perl não é puramente funcional
>> então não dá pra aplicar as otimizações que se aplicariam nesse caso,
>> mas aí é outra questão. Eu continuo enfatizando a legibilidade,
>> particularmente, acho a versão com curry mais legível.
>
> Acho que agora essa discussão virou algo de opinião mesmo. A
> performance do switch é melhor na execução, como você mesmo mostrou.

Não, vai depender do caso. Se você está precisando construir closures
desse tipo, é porque o processo de construção é complexo demais pra
ser otimizado a mão, e nesse caso, a execução da construção da closure
deve acontecer mais vezes do que a execução da closure, então é melhor
otimizar a construção. Se for um mero mapeamento entre valorA vs
valorB, é melhor usar lookup + dispatch ( $dispatch->{valorA}->($tag)
vs $dispatch->{valorB}->($tag) ) que não cria closure alguma.

-- 
   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://blog.edencardim.com/            http://www.shadowcat.co.uk/servers/


More information about the SaoPaulo-pm mailing list