[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