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

Luis Motta Campos luismottacampos em yahoo.co.uk
Sexta Março 30 01:23:32 PDT 2007


On Mar 29, 2007, at 12:14 PM, Nilson Santos Figueiredo Junior wrote:
> On 3/29/07, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
>>    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.
>
> Na verdade uma dispatch table seria a sugestão do Igor, não a  
> sugestão do Eden.

   Eu preferia a implementação do Edem, com a dispatch table  
armazenada implícitamente no namespace da classe... resolve melhor, e  
é muito, muito mais eficiente... claro, você tem de prestar atenção  
que nem todos os métodos são acessíveis, apenas os que começam com  
"to_"... isso é importante também.

>>    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.
>
> Na verdade, as pessoas deveriam passar o mais longe possível de
> modificar o UNIVERSAL::can(). Se você tem uma classe que implementa
> métodos via autoloading, deve sobrecarregar o método can() *naquela
> classe*.
>
> Se foi isso que você quis dizer, me perdoe por não ter entendido  
> direito. :-)


   Foi o que eu escrevi "sobrecarregar o método SUPER::can()" (para  
ficar mais claro agora).
   Desculpe a minha ambigüidade. :-)
   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