[Viana-pm] uso de prototypes nas funções/subrotinas em Perl

Jose Castro jose.castro at log.pt
Thu Dec 21 02:30:32 PST 2006


On Dec 21, 2006, at 10:25 AM, Eduardo Marques wrote:

> O protótipo faz com que não seja possível deduzir o comportamento da
> função olhando para a chamada, nem o contexto em que os argumentos vão
> ser avaliados. Porque o que o protótipo faz é dizer ao perl qual o
> contexto em que o argumento vai ser avaliado. Se o protótipo for func
> ($), isso não significa que o primeiro argumento é um escalar,  
> significa
> que se se passar uma lista como primeiro argumento, ela é avaliada em
> contexto escalar.
>
> No caso sub soma ($$) {} até nem é muito mau, se alguem tiver um
> @numeros = (4, 3); e chamar soma(@numeros), sem o protótipo a coisa
> funciona, mas com o protótipo, o perl avalia @numeros em contextos
> escalar para o primeiro argumento, ($a = 2), não tem um segundo
> argumento e estoura. Mas e se soma tem um terceiro argumento, @,  
> com um
> grupo de parametros qualquer que influencia o resultado (por  
> exemplo, a
> base com que o resultado é devolvido). Ao chamar soma(@numeros,
> 'octal'), o perl decide que $a = 2, $b = 0, @args =(), e devolve $a +
> $b. 2. O que não era exactamente o comportamento esperado, nem pela
> pessoa que usa a função, nem (provavelmente) pelo programador.
>
> Outro problema da prototipagem é ser inútil quando se passa para
> programação OO. A chamada de métodos ignora o protótipo.

E estes são os motivos pelos quais praticamente ninguém usa  
protótipos :-)

Basicamente, foi algo que pareceu uma boa ideia, há não-sei-quantos  
anos atrás, mas que afinal...

Abraços,

jac


-------------------------------------------
José Castro <jose.castro at log.pt>
Applicational Development Leader
log <www.log.pt>

Tel:  +351 21 330 42 20
Fax:  +351 21 330 42 19
Calçada Marques de Abrantes, 45 - 3º Dto
1200-718 Lisboa
-------------------------------------------



More information about the Viana-pm mailing list