[Rio-pm] [DUVIDA] Chamar função sem declarar construtor
Blabos de Blebe
blabos em gmail.com
Terça Abril 29 14:50:04 PDT 2014
> que Modulo::funcao dispensa declarar o construtor.
Não dispensa. Não tem nada a ver. Não misture as coisas.
Construtor é um conceito associado a um método especial utilizado para
inicializar objetos, ou seja, quando você está utilizando uma interface
orientada a objetos.
Em C++, o Construtor tem que ser um método cujo nome é o nome da classe.
Em Python é outro padrão.
Em Perl isso é livre, um construtor, ou seja um inicializador de objetos
pode ser qualquer método que eventualmente invoque a sub bless().
http://perldoc.perl.org/functions/bless.html
Em Perl convencionamos, pra ninguém ficar louco, que o construtor chama-se
new. Mas não existe palavra reservada ou obrigatoriedade nisso.
Modulo::funcao() é uma chamada 'procedural' aplicando o namespace completo
FQN. Não tem nada a ver com objetos, ou construtores.
***
No seu caso, como bem observado pelo Junior, o que você quer é não ter que
passar o namespace completo, por isso o uso do Exporter, que nada mais faz
do que tornar a sua função conhecida no namespace atual.
Exporter também não tem nada a ver com objetos.
A boa prática é usar @EXPORT_OK pra não exportar todos os símbolos por
default. Nesse caso, ao usar o seu módulo você precisa fazer:
use Modulo qw{ funcao };
Aqui, "boa prática" significa basicamente, "vou tormar o cuidado de
exportar apenas o necessário pra não correr risco de dar conflito com outra
função de mesmo nome de outro módulo".
Mas é só uma politica de boa vizinhança, não quer dizer, necessariamente,
errado. Depende do seu contexto.
***
Como em Perl as coisas são mais livres, você vai ver casos de um package
que tem construtor, métodos *E* funções comuns, ou seja, tanto uma
interface OO quanto procedural. Exemplo:
https://metacpan.org/pod/String::Trigram
Antigamente, quando OO era 'novidade', o pessoal costumava publicar uma
interface OO *E* uma interface procedural, pra ficar ao gosto do cliente
escolher. Outro exemplo: https://metacpan.org/pod/CGI
Por essas e outras, *EU*, acho meio confuso ter Perl como primeira
linguagem, pois ela te dar liberdades que em não tendo todos os conceitos
bem sedimentados, *pode* confundir.
O importante é, em estar estudando, não parar no estágio "ah consegui
fazer" mas sim prosseguir pelo menos até o "ah, entendi como funciona".
[]'s
2014-04-29 18:32 GMT-03:00 Aureliano Guedes <guedes_1000 em hotmail.com>:
> Funcionou da forma que o Junior passou.
>
> Obrigado.
>
> Experimentei fazer o dumper como o Bablos falou. Realmente são formas
> diferentes, sendo que Modulo::funcao dispensa declarar o construtor.
>
> ------------------------------
> From: juniiior182 em gmail.com
> Date: Tue, 29 Apr 2014 18:15:00 -0300
>
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] [DUVIDA] Chamar função sem declarar construtor
>
> Hi.
>
> Em 29 de abril de 2014 18:07, Blabos de Blebe <blabos em gmail.com> escreveu:
>
> Só mais uma coisa,
>
> Isso não tem nada a ver com Exporter.
>
> []'s
>
>
> Eu acho que ele tá perguntando mesmo como exportar uma sub e torná-la
> possível ser chamada à partir de outro script bastando dar um use no
> módulo, e não como invocar um método estaticamente como eu pensei.
>
> Creio que o jeito mais roots seria:
>
>
>
>
>
>
>
>
> *package Modulo::Modulo;use vars qw(@ISA @EXPORT);@ISA =
> (qw(Exporter));@EXPORT = qw(acp); sub acp {*
>
> *...*
> *}*
> 1;
>
> Deste modo, Aureliano, bastará dar um *use* em Modulo::Modulo e a função
> acp() estará acessível, assim como no Math::Prime::Util.
>
> []'s
>
> _______________________________________________
>
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
>
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20140429/07151351/attachment.html>
Mais detalhes sobre a lista de discussão Rio-pm