[Rio-pm] [DUVIDA] Chamar função sem declarar construtor

Blabos de Blebe blabos em gmail.com
Terça Abril 29 14:52:17 PDT 2014


Pacman, copião :)


2014-04-29 18:50 GMT-03:00 Blabos de Blebe <blabos em gmail.com>:

> > 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/1494cb46/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm