[SP-pm] Duvida primaria

russoz at gmail.com russoz at gmail.com
Thu Oct 21 06:25:59 PDT 2010


2010/10/21 Nilson Santos Figueiredo Jr. <acid06 em gmail.com>

> 2010/10/21 russoz em gmail.com <russoz em gmail.com>:
> > Similarmente, a inicialização das tabelas de lookup/dispatch (qualquer
> > flavour) NÃO fazem parte do bloco de código.
> > Ou, falando de outra forma: sim, você está certo, faz diferença em
> diversos
> > casos. But then again, se você escolhe um caso mal-codificado com
> dispatch e
> > compara com um bem-codificado com given/when, não é exatamente algo muito
> > justo, é? :-)
>
> Não é questão de mal ou bem codificado, é uma questão de necessidade.
>
> Sempre que você precise, por algum motivo, executar algum de N casos
> de código em que o código em si depende do escopo atual, você não
> poderia declarar a dispatch table de fora. Por exemplo, você está
> escrevendo uma função que retorna funções que usa variáveis do escopo
> local no closure.
>

Eu acho difícil que haja alguma situação na qual não seja possível usar
dispatch table.

O seu exemplo abaixo pode ser convertido sem grandes problemas. Além disso,
alguns pontos:

* Com closures, no entanto, a legibilidade não é grandes coisas em qualquer
um dos casos (IMHO)
* Não creio que haja uma diferença grande de performance em ambos os casos
* Esse código que você gerou de exemplo é tipicamente algo que vai ser
chamado uma vez (ou poucas, pelo menos), e a parte mais CPU-intensiva será
feita depois com a gerção das saídas das tags, já diretamente nas closures
(i.e., sem passar novamente pela lógica condicional). Logo, performance aqui
terá menos importância ainda.


>
> Exemplo esdrúxulo mas que talvez ilustre o tipo de caso de uso que
> estou falando:
>
> <code>
>
> sub tag_generator {
>    my ($tag_name, $style) = @_;
>    given ($style) {
>        when ('html') {
>            return sub {
>                my $content = shift // '';
>                "<$tag_name>$content</$tag_name>"
>            }
>        }
>        when ('xml')  {
>            return sub {
>                my $content = shift // '';
>                "<$tag_name" . ( length $content ?
> ">$content</$tag_name>" : "/>" )
>            }
>        }
>    }
> }
>
> my $tag_html = tag_generator('tag', 'html');
> my $tag_xml  = tag_generator('tag', 'xml');
>
> print $tag_html->("");
> print $tag_xml->("");
>
> </code>
>
> -Nilson
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
Alexei Znamensky [russoz_gmail_com] [russoz.wordpress.com] [
www.flickr.com/photos/alexeiz]
«Only love / Can bring the rain / That makes you yearn to the sky»
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20101021/78792374/attachment-0001.html>


More information about the SaoPaulo-pm mailing list