[Cascavel-pm] Sobre o perltidy
Nilson Santos Figueiredo Junior
acid06 em gmail.com
Segunda Janeiro 7 19:58:08 PST 2008
On Jan 7, 2008 11:23 PM, Giuliani Deon Sanches
<giulianisanches em gmail.com> wrote:
> Gostaria de opniões quanto a isso para que eu consiga deixar a
> aparência do código o mais genérica e bem organizada possível a ponto
> de qqer outro programador perl sentar e ler sem se sentir muito
> desconfortável com a organização.
Pra estética pura e simples, desde que você indente o código e coloque
quebras de linhas em lugares que façam sentido, ninguém vai ter muito
problema em entender se você abriu a chave do "if" na mesma linha ou
na linha seguinte (em Perl, é mais comum abrir na mesma linha).
O principal mesmo é seguir o estilo de nomenclatura das coisas
normalmente utilizado - acho que a maior parte dessas coisas está no
documento perlstyle.
Basicamente:
* NomeDeModulo::SemUsarUnderscore
* $variavel_local
* $VARIAVEL_GLOBAL
* nome_de_metodo
* _metodo_privado
Sempre:
use strict;
use warnings;
Evite loops for estilo C. Por exemplo, utilize:
for my $i (0..9)
ao invés de:
for (my $i = 0; $i < 10; $i++)
Ao abrir arquivos, utilize variáveis léxicas ao invés de GLOBs e faça
uso do open() com 3 parâmetros. Por exemplo, utilize:
open my $fh, '>', 'meu_arquivo' or die $!;
ao invés de
open(FH, '>meu_arquivo') or die $!;
(depois de aberto você pode usar $fh como usaria o FH)
Saiba quando utilizar as estruturas de controle em uma linha só para
aumentar legibilidade e evite os casos em que ela é piorada por esses
usos. Por exemplo, utilize:
$hash{ $_ } = 1 for qw/foo bar baz/;
ao invés de:
for (qw/foo bar/baz/) {
$hash{ $_ } = 1;
}
Quem vem de outras linguagens de programação costuma colocar prefixos
nos nomes de variáveis. Isso não é um idioma comum em Perl.
Você pode ficar tentado a utilizar a protótipos para os parâmetros de
suas funções. Não utilize a não ser que esteja querendo fazer algum
uso avançado que só é possível com o uso de protótipos (criar nova
sintaxe).
Caso você esteja programando orientado a objetos, não cheque o tipo
dos objetos específicamente - verifique a capacidade dos objetos
através do método can(). Caso esteja checando herança ou capacidade,
não utilize UNIVERSAL::isa() e UNIVERSAL::can() como funções - sempre
chame os métodos. Caso realmente não confie no que chega em você ao
ponto de duvidar se o que vem é realmente um objeto, utilize a
seguinte sintaxe:
use Scalar::Util qw/blessed/;
if ( blessed $obj && $obj->can('foo') ) {
# faça o que tem que fazer, provavemente chamar o método foo()
$obj->foo('bar');
}
Claro que minha opinião é que essas verificações são excessivas e
desnecessárias mas, caso se sinta tentado a fazê-las, pelo menos faça
do jeito correto.
Tem muito mais coisa por aí, quem sabe alguém completa.
-Nilson Santos F. Jr.
Mais detalhes sobre a lista de discussão Cascavel-pm