[Cascavel-pm] Res: Maneira melhor para escrever e reduzir trecho de código.

Daniel ® Antunes danielrantunes em yahoo.com.br
Segunda Abril 7 11:04:22 PDT 2008


    Na verdade o METHOD_A é uma constante do módulo que aponta para um método da operadora em questão.
    Tipo :

use constant METHOD_A 'getRGInfo';

    Minha intenção é de "tentar" manter um padrão nestes módulos pq são/serão muitos.
    Sobre usar o "new" de forma indireta, já tinham me falado isto, eu modifiquei em grande parte do código. Mas este trecho em particular faz parte do módulo chave do sistema e eu acabei não mexendo. Eu já procurei uma referência do por que desta "Best Practice", mas não encontrei, vc poderia me indicar algum lugar onde eu possa compreender isto ?
    Novamente obrigado.
 
Daniel ® Antunes
profissional de informática
gnu/linux user #238553

----- Mensagem original ----
De: Daniel Ruoso <daniel em ruoso.com>
Para: Cascavel Perl Mongers <cascavel-pm em pm.org>
Enviadas: Segunda-feira, 7 de Abril de 2008 14:51:35
Assunto: Re: [Cascavel-pm] Maneira melhor para escrever e reduzir trecho de código.

Seg, 2008-04-07 às 10:36 -0700, Daniel ® Antunes escreveu:
>     Olá amigos da lista, boa tarde...
>     Gostaria de saber se há a possibilidade de escrever estas linhas
> de forma sintética :
>             if ($sup eq 'ABC'){
>              $self->{book}=new Sup::ABC($xml,Sup::ABC::METHOD_A);
>             }
>             elsif ($sup eq 'D'){
>              $self->{book}=new Sup::D($xml,Sup::D::METHOD_A);
>             }
>             elsif ($sup eq 'EF'){
>              $self->{book}=new Sup::EF($xml,Sup::EF::METHOD_A);
>             }
>             elsif ($sup eq 'GHIJK'){
>              $self->{book}=new Sup::GHIJK($xml,Sup::GHIJK::METHOD_A);
>             }


{
   my $package = 'Sup::'.$sup;
   $self->{book} = $package->new($xml, $package->METHOD_A);
}

Algumas observações...

1 - *NUNCA* use a notação indireta. Sempre usa 'Module->new' no lugar de
'new Module'.
2 - O código acima pressupõe que METHOD_A é realmente um método e não
uma subrotina.

Se METHOD_A for realmente uma subrotina,

use UNIVERSAL qw(can);
...
{
   my $package = 'Sub::'.$sup;
   my $sub_a = $package->can('METHOD_A')
      or die 'No method a';
   $self->{book} = $package->new($xml, $sub_a->());
}

daniel

_______________________________________________
Cascavel-pm mailing list
Cascavel-pm em pm.org
http://mail.pm.org/mailman/listinfo/cascavel-pm





      Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento!
http://br.mail.yahoo.com/
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20080407/122fb0b8/attachment.html 


Mais detalhes sobre a lista de discussão Cascavel-pm