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

Luis Motta Campos luismottacampos em yahoo.co.uk
Quarta Maio 30 04:17:19 PDT 2007


On May 28, 2007, at 7:36 PM, André Garcia Carneiro wrote:
>> On 5/28/07, Nelson Ferraz <nferraz em gmail.com> wrote:
>> Com isso, muitas pessoas costumam repassar o meme de que declarar as
>> variáveis todas em um bloco só é mais legível. De fato, para essas
>> pessoas realmente deve ser.
>
> Com certeza é, para mim.

   Isto pode ser "treinado", André. A gente pode se "ensinar" a fazer  
as coisas diferentes. Esta capacidade é uma das coisas mais  
importantes num programador Perl. Alguém (não faz muito tempo) citou  
que "Perl continua a mesma, mas não escrevemos programas como há 5  
anos atrás". Isto é muito verdade, já que a capacidade de se adaptar  
(e a flexibilidade da linguagem em permitir isto) são uma das grandes  
vantagens competitivas do Perl para desenvolvedores.

>> Contudo, elas devem ser instruídas que
>> este comportamento não é mais adequado ao dia de hoje. Em linguagens
>> mais voltadas para performance, como C, a declaração de variáveis  
>> deve
>> ser feita o mais perto possível de onde ela será usada. Mesmo em um
>> loop, se o corpo do mesmo for grande e a variável utilizada muitas
>> vezes, talvez exista um ganho de performance ao colocar pra dentro do
>> bloco, apesar do tempo de alocação e dealocação (mas, realmente,  
>> em C,
>> normalmente a diferença entre alocar dentro e fora é mais notável,  
>> mas
>> então, que declare a variável *logo antes do loop*, se visa
>> performance).
>
> Se você pode declarar uma vez só, por que fazer isso várias vezes,  
> ou seja, por quê fazer isso dentro de um
> loop, por exemplo? Para mim continua esquisito.

   O Perl otimiza isso por conta própria, André, você não precisa se  
preocupar. Mas, por que a variável está declarada dentro de um  
escopo, o Perl também faz a "magica" de garantir que ela vai ser  
"limpa" automaticamente a cada nova iteração do loop. Isto torna o  
seu código mais simples (menos instruções, menos chance de esquecer  
uma instrução de limpeza), e mais fácil de entender.

>>> 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.
>>
>> Exatamente. Aplicar o conceito de escopo corretamente é extender o
>> conceito de eliminação de variáveis globais, o que é bom, em geral.
>
> Bom quanto a eliminar variáveis globais eu concordo, embora não  
> ache que tenha algo a ver com o que estamos
> questionando aqui.

   Tem tudo a ver. Eliminar variáveis "globais" é restringir o escopo  
em que elas existem ao mínimo possível, para minimizar a  
possibilidade de efeitos colaterais. Leia a definição de "variável  
global" que eu postei num email anterior a este.

> Posso muito bem declarar minhas variáveis locais no início da  
> subrotina como gosto de fazer...

   Isto é "boa prática", desde que a subrotina seja "o menor escopo  
possível" para as tais variáveis.

> Mas com certeza esse comportamento que vocês sugerem na hora de  
> escrever subrotinas, parece influenciar
> bastante o não uso de variáveis globais, já que aproxima a variável  
> de onde ela será usada, o que reforça e
> deixa mais 'óbvio' o uso de variáveis locais.

   Quase isso. Mas, se você prestar atenção, vai ver que é apenas a  
consequência de aplicar a definição de "Variável Global" no contexto  
em que você se encontra. :-)

   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 Cascavel-pm