[SP-pm] Referências

André Garcia Carneiro andre.garcia.carneir at terra.com.br
Tue Nov 18 03:09:37 PST 2008


Pois é... os protótipos de função 'clássicos', como em C/C++, Pascal etc., são definições sobre as funções que
você deve declarar, ou seja, dizer ao compilador que tipo de dados deve retornar, quais são os tipos dos
parâmetros que se pode enviar para a função, quantos parâmetros etc., por exemplo(em C) 

<code>
//includes aqui

//declaração de protótipos de função
int exemplo(char * nome,int idade);

//algum código aqui

//função principal
int main(void){
    exemplo("Andre",29);
}

//Declaração da função
int exemplo(char *nome,int idade) {
//algum código aqui
return 1;
}
</code>

Nesse exemplo, eu digo para o compilador que o nome da minha função é 'exemplo', que ela retorna um tipo
'int'(inteiro), e que recebe dois parâmetros: um 'ponteiro para char'(ponteiros:
http://pt.wikipedia.org/w/index.php?title=Especial%3ASearch&search=ponteiros&ns0=1&fulltext=Pesquisa) que eu
chamei de 'nome', e um inteiro que eu chamei de idade.

Aí você pode perguntar... ué, se eu já declarei o protótipo, porque eu tenho que escrever tudo de novo ? Eu não
sei como é hoje, pois faz tempo que não programo em C. Antigamente isso fazia toda a diferença, pois se você
não declarava o protótipo antes, teria que ter as declarações das funções antes das chamadas, e desse modo não
precisa, mas isso não importa. 

Nestas linguagens que eu citei, quando você define um protótipo de função, as chamadas para tal função devem
obedecer rigorosamente os tipos dos parâmetros, e você deve ter cuidado também com os tipos de variáveis que
você vai usar para guardar os retornos dessa função.

Se eu fizer uma chamada assim, por exemplo: exemplo(1); o compilador vai me xingar e dizer que o protótipo da
função não existe. Portanto isso serve para garantir que você está enviando o dado certo, e 'garante' que você
vai receber a coisa certa.

Já em Perl, não precisamos nos preocupar com isso, principalmente porque não existem tipos. No entanto, a
partir da versão 5.10(me corrijam se estiver errado) do perl, se não me engano, ele já permite fazer
protótipos, só que com um propósito diferente. Eu não sei muito bem porque ainda não estou mexendo com perl
5.10. O Champs disse que um dos propósitos de protótipos em perl  é o de garantir uma pré-transformação(se eu
entendi o que ele disse), mas sinceramente, não sei.

Espero ter ajudado.

Cheers!


---------- Cabeçalho original -----------

De: saopaulo-pm-bounces+andre.garcia.carneir=terra.com.br em pm.org
Para: saopaulo-pm em mail.pm.org
Cópia: 
Data: Mon, 17 Nov 2008 17:54:19 -0200
Assunto: Re: [SP-pm] Referências

> Alguém pode me explicar o que são Protótipos de funções/métodos ?
> 
> 2008/11/17 Alexei Znamensky <russoz em gmail.com>
> 
> > Eu acho que, se você vai evitar os protótipos, não há sentido em fazê-los.
> > Protótipos de funções/métodos e tipagem forte servem para pegar, em tempo de
> > compilação, enganos que poderiam ser difíceis (ou pelo menos chatos) de
> > depurar em tempo de execução. Um mecanismo que contorne a prototipagem é
> > algo que pode-se ter na manga, apenas para fazer uma gambiarra de última
> > hora.
> >
> > Dado que:
> > * o uso do & nas chamadas de &funcao() era, muitos anos atrás, a forma
> > normal de chamar uma função,
> > * ainda há muita documentação antiga rodando por aí
> > * tem muita gente nova que não mexeu com linguagens prototipadas ainda,
> >
> > Eu acho que o uso do & para isso, no perl, é um convite aberto à encrenca.
> > Vejam, não sou contra haver um mecanismode burlar as regras (no caso, os
> > protótipos de função). Só ach oque deveria ser um mecanismo menos acessível,
> > que exigisse mais verbose programming para dizer: SIM, TENHO CERTEZA QUE
> > QUERO FAZER ISSO.
> >
> > my $0.02
> >
> > []s
> >
> >
> > 2008/11/17 Luis Motta Campos <luismottacampos em yahoo.co.uk>
> >
> >> André Garcia Carneiro wrote:
> >>
> >> > Eu seria mais cauteloso antes de afirmar qualquer coisa a respeito
> >> > disso. Se mudou o modo de se fazer chamadas à funções, deve se ter um
> >> > bom motivo que, não vou mentir, não faço a menor idéia... de qualquer
> >> > forma, se eu souber de algo eu posto aqui.
> >> >
> >> > Eu não costumo usar '&' para fazer chamadas de funções, porque acho
> >> > esquisito. Mas isso sou apenas eu...
> >>
> >> O Daniel falou uma coisa muito acertada, André. Ponto para ele. :)
> >>
> >> Ele lembrou de um detalhe importante, que é das poucas coisas que mantém
> >> o operador "&{}" na linguagem Perl: a habilidade de evitar protótipos de
> >> função, e ainda assim ser capaz de chamar a sub.
> >>
> >> Claro, eu não recomendo que se faça isso por padrão (tem muitas funções
> >> com protótipo que eu gosto de usar como estão).
> >>
> >> Por outro lado, aqui tem uma questão de boas práticas que eu não sei
> >> exatamente como resolver: usar e evitar protótipos em funções não são
> >> exatamente práticas óbvias ou simples de documentar e verificar. Eu
> >> apanhei muito aqui no trabalho por causa de um protótipo escrito errado.
> >>
> >> O que o resto dos leitores desta lista pensa sobre protótipos de função
> >> e a habilidade de evitá-los?
> >>
> >> Putamplexos.
> >> --
> >> Luis Motta Campos is a software engineer,
> >> Perl Programmer, foodie and photographer.
> >> _______________________________________________
> >> SaoPaulo-pm mailing list
> >> SaoPaulo-pm em pm.org
> >> http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >>
> >
> >
> >
> > --
> > Alexei Znamensky [russoz_gmail_com] [russoz.wordpress.com] [
> > www.flickr.com/photos/alexeiz]
> > "Though we live in trying times, we're the ones who have to try"
> >
> > _______________________________________________
> > SaoPaulo-pm mailing list
> > SaoPaulo-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> >
> 
> 
> 
> -- 
> print
> "\x54\x68\x65\x20\x53\x69\x6c\x65\x6e\x74\x20\x47\x75\x61\x72\x64\x69\x61\x6e",$/
> 
> ( Procuro emprego CV:
> http://www.4shared.com/file/71236573/2c80149/curriculo.html )
> 

--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org



More information about the SaoPaulo-pm mailing list