[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