[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