[Cascavel-pm] [Spam] Re: [Spam] Re: PrincipaisContribuidoresCascavelPM
Nilson Santos Figueiredo Junior
acid06 em gmail.com
Quarta Maio 30 12:14:21 PDT 2007
On 5/30/07, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
> Não é "para todo canto". Tem alguns casos apenas em que isso é
> útil. A regra deixa de ser "na cabeça da subrotina" e passa a ser "na
> cabeça de qualquer bloco sintático". É uma "medida clássica", que
> começou a ser divulgada quando a ANSI normalizou a linguagem C. Todos
> os compiladores ANSI C reclamam quando você declara variáveis sem ser
> no início de um "bloco sintático". E Perl segue a mesma convenção
> (que deve ter uns 40 anos, pelo menos).
Na verdade, o ideal mesmo é declarar variáveis quando for utilizar. No
gcc, existe uma diferença de performance entre os seguintes códigos:
int func (int a, int b) {
int x, y, z;
x = a;
y = b;
z = x + y;
return z;
}
e
int func (int a, int b) {
int x = a;
int y = b;
int z = x + y;
return z;
}
O segundo deve ser ligeriamente mais rápido. Aliás, nesse caso
simples, talvez o otimizador acabe otimizando as duas coisas pra mesma
coisa. Mas supondo uma função com corpo maior, mesmo com o mesmo
escopo, ele conseguirá otimizar melhor se a variável tiver sido
declarada mais perto de onde é utilizada.
Além disso tudo, eu, particularmente prefiro assim. ;-)
Pra mim, declarar em um lugar e só atribuir em outro é algo feio e que
me faz lembrar programadores acostumados com linguagens não-modernas.
Então, normalmente, meu código será assim:
sub method {
my ($self, @args) = @_;
my $value = $self->another_method(@args);
my $another_value = $value->yet_another_method;
return $self->baz($another_value);
}
ao invés de algo como:
sub method {
my ($self, @args) = @_;
my ($value, $another_value);
$value = $self->another_method(@args);
$another_value = $value->yet_another_method;
return $self->baz($another_value);
}
Mas isso acho que é só uma questão de preferência. Mas quando eu vejo
um "bloco de declaração de variáveis" eu já fico ressabiado com o
código.
-Nilson Santos F. Jr.
Mais detalhes sobre a lista de discussão Cascavel-pm