[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