From aventuras.de.joao.sem.medo at gmail.com Wed Dec 20 10:38:36 2006 From: aventuras.de.joao.sem.medo at gmail.com (=?ISO-8859-1?Q?Jo=E3o_Ferreira?=) Date: Wed, 20 Dec 2006 18:38:36 +0000 Subject: [Viana-pm] =?iso-8859-1?q?uso_de_prototypes_nas_fun=E7=F5es/subro?= =?iso-8859-1?q?tinas_em_Perl?= Message-ID: <95730dde0612201038p5385b622qa26d6e1f48225d1d@mail.gmail.com> Ol? a todos, tenho andado a discutir com alguns colegas o seguinte: o que ? que se ganha/perde em usar prototypes nas fun??es de Perl ?? qq coisa do tipo: sub soma($$) { my ($a,$b)=@_; return $a+$b; } ... my $resultado=soma(2,3); 1 - um possivel interesse seria verificar a quantidade de argumentos em pr?-runtime ??? 2 - por outro lado tornaria o c?digo mais leg?vel (ou talvez n?o).... 3 - no entanto n?o vejo a declara??o dos arguimentos em lado nenhum... pelos vistos ningu?m usa aquilo.. ?!?! algu?m tem um ponto de vista sobre isto??? Cumprimentos a todos Obrigado -- Jo?o Ferreira - jmf From sacorb at sapo.pt Thu Dec 21 02:25:32 2006 From: sacorb at sapo.pt (Eduardo Marques) Date: Thu, 21 Dec 2006 10:25:32 +0000 Subject: [Viana-pm] =?iso-8859-1?q?uso_de_prototypes_nas_fun=E7=F5es/subro?= =?iso-8859-1?q?tinas_em_Perl?= In-Reply-To: <95730dde0612201038p5385b622qa26d6e1f48225d1d@mail.gmail.com> References: <95730dde0612201038p5385b622qa26d6e1f48225d1d@mail.gmail.com> Message-ID: <458A611C.6040102@sapo.pt> Jo?o Ferreira wrote: > Ol? a todos, > > tenho andado a discutir com alguns colegas o seguinte: o que ? que se > ganha/perde em usar prototypes nas fun??es de Perl ?? > > qq coisa do tipo: > > sub soma($$) { > my ($a,$b)=@_; > return $a+$b; > } > > ... > > my $resultado=soma(2,3); > > 1 - um possivel interesse seria verificar a quantidade de argumentos > em pr?-runtime ??? > > 2 - por outro lado tornaria o c?digo mais leg?vel (ou talvez n?o).... > > 3 - no entanto n?o vejo a declara??o dos arguimentos em lado nenhum... > pelos vistos ningu?m usa aquilo.. ?!?! > > algu?m tem um ponto de vista sobre isto??? > > Cumprimentos a todos > Obrigado > O Damian Conway tem. :) Do livro "Perl Best Practices": > Prototypes: > _Don't use subroutine prototypes_ 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. From jose.castro at log.pt Thu Dec 21 02:30:32 2006 From: jose.castro at log.pt (Jose Castro) Date: Thu, 21 Dec 2006 10:30:32 +0000 Subject: [Viana-pm] =?iso-8859-1?q?uso_de_prototypes_nas_fun=E7=F5es/subro?= =?iso-8859-1?q?tinas_em_Perl?= In-Reply-To: <458A611C.6040102@sapo.pt> References: <95730dde0612201038p5385b622qa26d6e1f48225d1d@mail.gmail.com> <458A611C.6040102@sapo.pt> Message-ID: <49313124-A251-420E-8BD0-0EBBEC588B92@log.pt> 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 Applicational Development Leader log Tel: +351 21 330 42 20 Fax: +351 21 330 42 19 Cal?ada Marques de Abrantes, 45 - 3? Dto 1200-718 Lisboa -------------------------------------------