[SP-pm] Reduzir código repetido.

Eden Cardim edencardim at gmail.com
Sat Jan 15 01:59:10 PST 2011


>>>>> "Alexei" == Alexei Znamensky <russoz em gmail.com> writes:

    Alexei> 2011/1/14 "Flávio R. Lopes" <flavio.lopes em links.inf.br>
    Alexei>     Em 14-01-2011 23:35, Daniel de Oliveira Mantovani escreveu:

    Alexei>         my $backup_nome = "$destino" . "$prefixo" . "$data_backup" . ".tar.bz2";
    Alexei>         Que desperdício de processamento :P
    Alexei>         my $backup_nome = "$destino$prefixo$data_backup" . '.tar.bz2';

    Alexei> mantovani--

    Alexei> 2) Mantovani: eu esperava mais de você a essa altura do
    Alexei> campeonato. Flávio, os parcos milissegundos que você poderia
    Alexei> eventualmente ganhar na concatenação das strings não são
    Alexei> NADA comparados com os vários segundos que você irá esperar
    Alexei> pelo backup. Enquanto isso, seu código ficará 2x mais
    Alexei> difícil de ler.

Sem contar que, na verdade, interpolação é sempre mais lento que
concatenação:

bjork:~ edenc$ perl -MO=Concise -le'print "$destino" . "$prefixo" . "$data_backup" . q{.tar.bz2};'
f  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
e     <@> print vK ->f
3        <0> pushmark s ->4
d        <2> concat[t6] sKS/2 ->e
b           <2> concat[t5] sKS/2 ->c
8              <2> concat[t3] sK/2 ->9
5                 <@> stringify[t1] sK/1 ->6
-                    <0> ex-pushmark s ->4
-                    <1> ex-rv2sv sK/1 ->5
4                       <$> gvsv(*destino) s ->5
7                 <@> stringify[t2] sK/1 ->8
-                    <0> ex-pushmark s ->6
-                    <1> ex-rv2sv sK/1 ->7
6                       <$> gvsv(*prefixo) s ->7
a              <@> stringify[t4] sK/1 ->b
-                 <0> ex-pushmark s ->9
-                 <1> ex-rv2sv sK/1 ->a
9                    <$> gvsv(*data_backup) s ->a
c           <$> const(PV ".tar.bz2") s ->d

= 21 opcodes


bjork:~ edenc$ perl -MO=Concise -le'print "$destino$prefixo$data_backup" . q{.tar.bz2};'
c  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
b     <@> print vK ->c
3        <0> pushmark s ->4
a        <2> concat[t4] sK/2 ->b
-           <1> ex-stringify sK/1 ->9
-              <0> ex-pushmark s ->4
8              <2> concat[t2] sKS/2 ->9
6                 <2> concat[t1] sK/2 ->7
-                    <1> ex-rv2sv sK/1 ->5
4                       <$> gvsv(*destino) s ->5
-                    <1> ex-rv2sv sK/1 ->6
5                       <$> gvsv(*prefixo) s ->6
-                 <1> ex-rv2sv sK/1 ->8
7                    <$> gvsv(*data_backup) s ->8
9           <$> const(PV ".tar.bz2") s ->a

= 17 opcodes


Melhor mesmo seria:

my $backup_nome = $destino . $prefixo . $data_backup . '.tar.bz2';

bjork:~ edenc$ perl -MO=Concise -le'print $destino . $prefixo . $data_backup . q{.tar.bz2};'
c  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
b     <@> print vK ->c
3        <0> pushmark s ->4
a        <2> concat[t3] sKS/2 ->b
8           <2> concat[t2] sKS/2 ->9
6              <2> concat[t1] sK/2 ->7
-                 <1> ex-rv2sv sK/1 ->5
4                    <$> gvsv(*destino) s ->5
-                 <1> ex-rv2sv sK/1 ->6
5                    <$> gvsv(*prefixo) s ->6
-              <1> ex-rv2sv sK/1 ->8
7                 <$> gvsv(*data_backup) s ->8
9           <$> const(PV ".tar.bz2") s ->a

= 15 opcodes

O único problema com a abordagem inicial do flávio foi interpolar as
variáveis individualmente, que pra esse caso em particular, é
desnecessário.

-- 
Eden Cardim
Software Engineer
+55 73 9986-3963
edencardim.com


More information about the SaoPaulo-pm mailing list