<span style="font-family: courier new,monospace;">Eden, não é por nada não, mas acho que o código ganhou uma complicação /abstração desnecessária. Eu prefiro a solução do champs.<br><br>Solli M. Honório<br></span><br><div>
<span class="gmail_quote">On 3/22/07, <b class="gmail_sendername">Eden Cardim</b> <<a href="mailto:edencardim@gmail.com">edencardim@gmail.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 3/20/07, Daniel Ruoso <<a href="mailto:daniel@ruoso.com">daniel@ruoso.com</a>> wrote:<br>> Olha que hoje pra mim o código não me parece tão ruim assim... Acho que<br>> os if's encadeados deixam mais claro as operações que estou fazendo...
<br>> Mas, para exercitar, como você faria?<br><br>Eu sei que a pergunta não foi pra mim, mas já que o tema da semana é<br>"padrões de projeto", eu usaria um Chain of Responsability. Seria algo<br>assim:<br><br>
<untested code><br><br>package AddressExtractor;<br><br>use Moose;<br><br>has parsers => (isa 'ArrayRef', is => 'rw', default => sub {[]});<br><br>sub add_parser {<br> push @{shift->parsers}, shift;
<br>}<br><br>sub parse {<br> my($self, $address) = @_;<br> my @parsed;<br> foreach my $parser (@{$self->parsers}) {<br> last if @parsed = $parser->parse($address);<br> }<br> return @parsed;<br>}<br><br>package ParserA;
<br><br>use Moose;<br><br>sub parse {<br> my($self, $address) = @_;<br> if($address =~ /^rua\,*\s*(.+)$/i) {<br> my ($t,$l,$n,$c);<br> #lógica de extração aqui...<br> return ($t,$l,$n,$c);<br> }<br>}<br><br>package ParserB;
<br><br>#etc...<br><br>package main;<br><br>my $extractor = AddressExtractor->new();<br>$extractor->add_parser( ParserA->new() );<br>$extractor->add_parser( ParserB->new() );<br><br>my ($t,$l,$n,$c) = $extractor->parse("Av. Foo, etc...");
<br><br></untested code><br><br>--<br>Eden Cardim<br>Instituto Baiano de Biotecnologia<br>Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas<br>Laboratório de Bioinformática<br>--<br>"you seem to think that 'close enough' is close enough...
<br>please learn to be 'literal' around programming."<br>merlyn - on irc.freenode.net#perl<br>_______________________________________________<br>Cascavel-pm mailing list<br><a href="mailto:Cascavel-pm@pm.org">
Cascavel-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></blockquote></div><br>