[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