[SP-pm] Entendendo Protótipos

Adriano Ferreira a.r.ferreira at gmail.com
Tue Dec 23 06:39:51 PST 2008


2008/12/23 breno <breno at rio.pm.org>:
> 2008/12/23 Luis Motta Campos <luismottacampos at yahoo.co.uk>:
>> breno wrote:
>>> protótipos são uma espécie de verificação de argumentos em tempo de
>>> compilação, e permitem que vc chame subrotinas sem os parêntesis sem
>>> gerar ambiguidade, como as funções built-in do Perl ("push", por
>>> exemplo). A declaração de protótipos não envolve o nome da variável
>>> onde vc pretende colocá-la, apenas o símbolo do tipo de variável ($,
>>> @, %, &) que espera receber como parâmetros.
>>
>> ERRADO.
>>
>> Protótipos não verificam nada sobre o conteúdo dos parâmetros passados.
>> Não verificam nem mesmo se os parâmetros passados realmente existem.
>>
>
> $ perldoc perlsub
>
> <snip>
>  Prototypes
>
>       Perl supports a very limited kind of compile-time argument checking
>       using function prototyping.
> </snip>
>
> Meu comentário foi praticamente uma tradução: "protótipos são uma
> espécie de verificação de argumentos em tempo de compilação". Faltou
> só o "muito limitado".
>
> Talvez eu tenha deixado (mal) subentendido que estava falando de
> protótipos "tradicionais" quando disse que a declaração não envolvia o
> nome da variável e sim o símbolo do tipo esperado, mas foi pq achei
> que o Daniel estava se referindo a eles pelo próprio exemplo que usou
> (daí minha sugestão do Method::Signatures). Talvez não tenha ficado
> tão claro quando disse "e permitem" e não "e permitem (entre outras)".
> Talvez eu tenha escrito rápido demais. Talvez vc tenha lido rápido
> demais.
>
> Ou eu falei algo de errado mesmo?

De forma alguma. Mas ogros gostam de ser espalhafatosos e assustadores
-- é uma característica que mantém a reputação deles como temidos, mal
amados e admirados/respeitados (se você tem a imparcialidade de olhar
através da superfície e ver suas boas intenções).

> De qualquer forma, o seu ERRADO poderia ter sido facilmente
> substituido por COMPLEMENTANDO ou mesmo EXPLICANDO MELHOR, ou
> simplesmente omitido por completo. Mas aí não seria vc, não é mesmo?
> :-)

De fato, seria mais construtivo se fosse colocado assim.

Protótipos em Perl compõem uma 'feature' que em geral não deve ser
usada -- traz muitos mais problemas do que resolve. Entre eles mágica
demais embutida.

Exemplos de textos muito bons no assunto são:

* Far More Than Everything You Ever Want to Know (FMTEYEWTK) on Perl
"Prototypes", by Tom Christiansen
http://markmail.org/message/qthkzdle3j7hgm66#query:prototypes%20perl%20christiansen%20fmteyewtk+page:1+mid:qqkwh6s7pqjwbnxr+state:results
(Pode haver versões mais atualizadas deste texto por aí, mas não pude
encontrá-las com uma busca rápida. Existe também uma pequena
quantidade de pontos na argumentação de Tom Christiansen que mudaram
com as versões mais recentes do interpretador Perl, mas não é tanta
coisa que faça com que protótipos sejam recomendados.)

* em Perl Best Practices, Damian Conway também fala sobre protótipos.
A conclusão dele também é no estilo "Não use".

Saudações,
Adriano


P.S. Este tipo de atitude me lembra o destino que o Perl Advent
Calendar teve neste ano. (http://www.perladvent.org/2008/) Basicamente
três pessoas (entre elas, o editor) contribuíram artigos para o evento
(são 25, entre 1 e 25 de dezembro). Acho que esta derrocada se deve
também à forma com que os trabalhos são recebidos (muitas críticas
contundentes que podiam ser colocadas de forma melhor e muita
tendência para os gostos e convenções dos organizadores) e muitas
intromissões nos textos finais (com pouca consulta aos autores e a
presuposição de que os responsáveis pelo calendário sabem o que é
melhor). Nestes termos, três contribuidores até que foram muitos.

> Parabéns pela completa e didática explicação posterior. Apesar de ogro
> vc tem muito mais paciência do que eu.
>
>
> []s
>
> -b
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>


More information about the SaoPaulo-pm mailing list