[SP-pm] Referências

Luis Motta Campos luismottacampos at yahoo.co.uk
Tue Nov 18 02:18:49 PST 2008


Daniel de Oliveira Mantovani wrote:
> Alguém pode me explicar o que são Protótipos de funções/métodos ?

Ah! Agora sim, uma pergunta pública. Esta eu respondo.

Protótipos de função é uma técnica de verificação de tipo de dados. Eles
servem para ajudar o compilador a verificar erros de tipos de dados
durante a compilação de programas.

http://pt.wikipedia.org/wiki/Prot%C3%B3tipo_de_fun%C3%A7%C3%A3o

Em Perl, protótipos de função não funcionam assim: a linguagem não tem
tipos de dados, e assim não tem como ter erros de tipo de dados.

Protótipos de função em Perl são uma transformação que se pode aplicar
nos dados antes que eles sejam passados para a função que você está
chamando. É muito útil para ajudar o programador a escrever menos e
fazer programas mais legíveis e intuitivos. Por exemplo, para
transformar um array em uma referência de array, você pode usar o
protótipo "\@" (entre parentesis, na definição da função):

sub example ( \@\@ ) {
  my ( $arrayref_a, $arrayref_b ) = ( @_ );
  # ...
}

E você pode chamar a função assim:

my @a = 'a'..'Z'; # todas as letras
my @b = 0..9; # todos os digitos
example @a, @b; # não mistura @a e @b

A vantagem de usar protótipos de função em Perl é muito mais de "açúcar
sintático" que qualquer outra. Podemos fazer mágicas muito
interessantes, mas elas podem eventualmente dificultar a manutenção e
causar erros não muito simples de se enxergar.

Eu pessoalmente não aconselho ninguém a usar protótipos de função, mas,
se você está usando uma biblioteca que faz uso deles, chamar a função
com "&" no começo vai fazer a tua vida mais complicada, já que você está
desrespeitando a interface da biblioteca que você está usando (que
assume que você está usando o protótipo de função).

Esperoq que isso ajude a compreender o que são protótipos de função nas
outras linguagens de programação e em Perl.

Putamplexos.
-- 
Luis Motta Campos is a software engineer,
Perl Programmer, foodie and photographer.


More information about the SaoPaulo-pm mailing list