[SP-pm] ordem dos valores numa array escorregadia
Luis Motta Campos
luismottacampos em yahoo.co.uk
Segunda Agosto 6 00:31:44 PDT 2007
On Aug 6, 2007, at 2:25 AM, Rodrigo Fernandes wrote:
> Caro Luis,
>
> Como a ordem dos dados não modificava o resultado, e
> era exatamente a ordem dos valores da array o meu
> problema, e como não tive como te responder antes, fui
> tocando o código como estava mesmo. E agora já não
> preciso solucionar aquela dúvida.
>
> Quanto aos while(1), qual é a tua sugetão de
> aperfeiçoamento?
Rodrigo, o teu código desperdiça a condição de saída, e usa um
"last unless" logo a seguir para fazer a mesma coisa. Isto custa
"caro" em tempo de processamento, e, mais importante, em
manutenibilidade do programa (sendo elegante, é mais fácil de
manter). Copiei o trecho de código de que eu estou falando abaixo:
sub MatchDecreasedForms{
GetLineResult;
GetLineLexemas;
while (1){
last unless ($lineresults[$countb]);
while (1){
last unless ($linelexemas[$count]);
if ($linelexemas[$count] eq $lineresults[$countb]){
print "$lineresults[$countb]";
$matchedcash[$count] = $countb;
}
$count++;
}
$countb++;
$count = 0;
}
print @matchedcash;
}
Minha sugestão é usar
### EU NÃO TESTEI O CÓDIGO! Use por sua conta e risco!
sub MatchDecreasedForms{
my @lineresults = GetLineResult;
my @linelexemas = GetLineLexemas;
my ( $line_counter, @matchedcash );
RESULTS:
foreach my $result ( @lineresults ) {
LEXEMA:
foreach my $lexema ( @linelexemas ) {
if ( $lexema eq $result ) {
print $result;
push @matchedcash, $line_counter;
}
}
$line_counter++;
}
print @matchedcash;
}
# Desafio: implementar a mesma coisa, LEGÍVEL (não, isto não é
golf), SEM USAR um contador de linhas ($line_counter).
# Dica: existe uma variável especial do perl que indica a linha do
arquivo que está sendo lido.
Manutenibilidade é a primeira prioridade de quem codifica. A
segunda é se certificar se funciona. ;-)
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 SaoPaulo-pm