Descobri na semana passada um plugin do CPAN chamado Moose.
Só pra dar uma descrição da ferramenta, imagina que antes desse plugin se criava uma classe de perl assim:
package SomeClass;
use strict;
use warnings;
sub new
{
my ($class, $parameter) = @_;
bless { parameter => $paremeter } $class;
}
sub parameter
{
if( scalar @_ > 1 )
{
$_[0]->{parameter} = $_[1];
}
return $_[0]->{parameter};
}
A implementação de OO de perl é um tanto quanto tosca porque ela primeiro requer que você manipule diretamente um hash fingindo que isso é um objeto. Segundo, tenho que colocar uma lógica de programação na chamada do método que não é tão fácil de entender pra quem não está acostumado com perl (e com certeza os $_[0] e $_[1] tornam o código um pouco confuso, mas isso eu podia refatorar se quisesse).
Bom, aí é que entra o Moose. A implementação da mesma classe em Moose ficaria assim:
package SomeClass;
use Moose;
has parameter => ( isa => 'Str', is => 'rw', required => 1 );
E pronto, com 3 linhas de código, o Moose já criou o método new, getters e setters e além disso já fez uma validação prévia para verificar que meu atributo parameter é uma String e que ela deve ser fornecida no construtor da classe.
Além disso, o Moose permite fazer algumas operações bem mais avançadas, como por exemplo:
- Colocar valores padrões em campos
- Fazer transformação de valores fornecidos para outros da forma que eu quiser, de modo que eu posso inicializar um objeto por exemplo com uma string descrevendo uma URL e esse objeto ser armazenado no objeto e obtido depois por método get como um objeto URI.
- Definir validação para cada atributo da minha classe (fica muito fácil por exemplo criar uma enum, basta verificar que o atributo fornecido está presente em uma lista de atributos).
- Anexar interceptors nos métodos (tipo, sempre que método A for chamado, o método B deve ser chamado logo depois).
No comments:
Post a Comment