[Cascavel-pm] [Spam] Re: [Spam] Re: PrincipaisContribuidoresCascavelPM

André Garcia Carneiro andre.garcia.carneir em terra.com.br
Segunda Maio 28 09:59:17 PDT 2007


> >> Esta não é uma justificativa muito boa, pois, em geral, o tempo de
> >> alocar e desalocar a variável tem um impacto muito menor do que
> >> *qualquer outra coisa* que você faça a seguir.
> >
> > Talvez não no caso dele, mas se houvessem muitas iterações(muitas  
> > mesmo),  você há de concordar que é
> > desnecessário alocar variáveis dentro de iterações...
> 
> Aí está o seu engano: *não importa o número de iterações*, se você  
> tiver *qualquer coisa útil* dentro do loop, o impacto da otimização  
> será desprezível.
> 
> Experimente:
> 
> 	use Benchmark qw ':all';
> 
> 	cmpthese(
> 	    1_000,
> 	    {
> 	        'my_inside'  => 'for(1..10_000) { my $i = foo($_); }',
> 	        'my_outside' => 'my $i; for(1..10_000) { $i = foo($_); }',
> 	    }
> 	);
> 
> 	sub foo {
> 	    my $i = shift;
> 	    return $i++;
> 	}
> 
> Resultado:
> 
> 	            Rate  my_inside my_outside
> 	my_inside  130/s         --        -1%
> 	my_outside 131/s         1%         --
> 
> Ou seja: neste exemplo simples, em que não temos nenhuma chamada  
> realmente lenta dentro do loop, podemos dizer que a diferença é  
> desprezível.
> 
> >> No exemplo em questão, onde temos uma chamada realmente lenta dentro
> >> do loop, pode-se dizer que este tempo é desprezível.
> >
> > Novamente, no caso dele não... por isso eu disse 'evite', e não  
> > 'não use'...
> 
> O exemplo demonstra o caso geral, em que o conselho não se aplica.
> 
> Mas é claro que o conselho se aplica a algumas situações,  
> nomeadamente quando o seu loop não faz nada. Nesse caso a  
> "otimização" poderia trazer um impressionante ganho de 10 a 20%. Isso  
> mesmo: 10 a 20% mais execuções de um loop vazio!
> 
> É pena que este ganho não escala, e quanto mais coisa você fizer  
> dentro do loop, menor será o ganho, até o ponto em que ele se tornar  
> praticamente nulo. (E como vimos no benchmark, basta uma chamada a  
> uma subrotina simples para que o ganho se torne desprezível.)

Ok ok... esqueça a questão do desempenho então. Não cheguei a fazer testes, então desculpem-me se falei
besteira antes de testar.

 
> Resta saber se esta forma de estruturar o código aumenta ou prejudica  
> a legibilidade do programa.

Acho que cai muito na questão pessoal também. Eu gosto de declarar variáveis no início das minhas subrotinas,
ao invés de espalhar isso pelo código todo. 


> >> Declare as variáveis no menor escopo possível, de forma que elas não
> >> sejam usadas por mais tempo do que o necessário (tanto do ponto de
> >> vista do computador, quanto do programador -- ao restringir o escopo,
> >> você deixa de se preocupar com os efeitos colaterais de uma  
> >> variável).
> >
> > Pra mim sempre vai ser no mínimo esquisito alocar variáveis dentro  
> > de iterações.
> 
> Se você acredita que separar a declaração do seu uso de uma variável  
> torna seus scripts mais legíveis... vá em frente.
> 
> Eu pessoalmente discordo: as variáveis deveriam ter o menor escopo  
> necessário, para que nós possamos "esquecer" delas onde não são  
> necessárias.
> 
> Mas esta é apenas a minha opinião...


Cheers!

--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org



Mais detalhes sobre a lista de discussão Cascavel-pm