[Cascavel-pm] evitando estruturas "switch-case" em métodos de uma classe

Luis Motta Campos luismottacampos em yahoo.co.uk
Quarta Março 28 23:44:15 PDT 2007


On Mar 28, 2007, at 7:27 PM, Eden Cardim wrote:
> Outra forma de se fazer seria:
>
> sub export {
>    my $self = shift;
>    my $param = shift;
>
>    if( my $meth = $self->can("to_$param") ) {
>        $meth->($self);
>    } else {
>        carp("Unknown format: '$param'");
>    }
> }

   Alceu, o nome desta técnica é "dispatch table". Eu sugeri isto  
para refactorar um if-elsif-else muito grande que o Ruoso postou  
nesta lista uns dias atrás, afirmando ser a única forma de fazer  
parse de listas de dados aproximadamente semelhantes.

   Eu recomendo a implemetação do Edem, que toma o cuidado de  
verificar se você pode usar o método, e não permite que a classe seja  
usada de forma maliciosa. Acredito que você eventualmente precise  
sobrecarregar o UNIVERSAL::can() com uma implementação sua, caso você  
esteja usando AUTOLOAD'ing para alguma coisa.

   Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}




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