[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