[Rio-pm] hash como parametro

Solli Honorio shonorio em gmail.com
Quinta Julho 1 06:12:40 PDT 2010


Em 1 de julho de 2010 10:09, Solli Honorio <shonorio em gmail.com> escreveu:


> 2010/7/1 GmailPaqui <cpaqui em gmail.com>
>
>>  Caros, bom dia!
>>
>>
>> Se a passagem de parâmetros por referência é ruim, como proceder no caso
>> onde tenho dois parâmetros, um hash e um scalar, e o segundo parâmetro é
>> opcional?
>> Devo testar se hash está completo, pares de valor?
>>
>> --
>>  *Cleive Paqui*
>>
>>
>>
> Cleive,
>
> Como disse o Gabriel, não é ruim, só estamos extrapolando uma questão
> técnica. A passagem por referência é uma opção válida e está dentro (e muito
> utilizada) do estilo de programação Perl. O único cuidado que é preciso ter
> quando você passa o valor por referência é ter a consciência de que as
> alterações dos valores nestas referencias dentro da função resultará na
> alteração do valor fora da função.
>
> Dito isto, a tua pergunta permite a discussão da(s) boa(s) prática(s) para
> os parâmetros, e  eu achei que alguém iria abordar isto antes. Seguindo o
> PBP (Perl Best Practice - http://amzn.to/aDbCpR ) temos algumas
> recomendações sobre este assunto, sendo eles (não lembro de todos pois não
> estou com o PBP aqui agora) :
>
> * return - não misture interface de erro com interface de dados. Se você
> utilizar o return para erro, só utilize para isto. Se utilizar para retornar
> o resultado da função, utilize apenas para isto. NUNCA faça as duas coisas
> ao mesmo tempo (ou pelo mesmo canal);
>
> * parâmetros
> 1o. nunca manipule diretamente os valores através do $_[0], $_[1] ..., a
> menos que você realmente saiba o que está fazendo. E se você realmente
> souber, não fará isto numa programa sério. Além ter de alterar os valores
> originais, isto deixa o programa ilegível;
>
> 2o. utilize a atribuição simples (sem passagem de referencia) apenas quando
> for utilizado até 2 parâmetros scalares ou apenas um parâmetro de grupo
> (hash ou array);
>
> 3o. é fortemente recomendado utilizar a técnica de "named arguments". Isto
> significa passar os argumentos através de uma hash, onde a tua função poderá
> saber se todos os argumentos obrigatórios estão presente.
>
> 4o. considere retornar o resultado de uma função via um argumento de
> referencia.
>
> Um exemplo, meu, para uma subrotina seria assim :
>
> <code>
>
> sub minha_rotina {
>   my %args = @_;
>
>   # verifica argumentos obrigatórios
>
>   for my $arg ( qw (arg1 arg3 arg4 ) ) {
>     die "Argumento $arg é obrigatório mas não foi informado" if ! exist
> $args{$arg};
>   }
>
>   ... faça alguma coisa com os argumentos ...
>
> }
>
> </code>
>
> Outras fontes sobre isto :
>
> http://www.perl.com/pub/a/2006/02/23/advanced_subroutines.html   (mas por
> favor, nunca utilize prototypes)
> http://perldesignpatterns.com/?NamedArguments
> http://www.devshed.com/c/a/Perl/Subroutines-in-Perl/3/
> http://www.cs.cf.ac.uk/Dave/PERL/node126.html
>
>
>
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>
>
>
> --
> "o animal satisfeito dorme". - Guimarães Rosa
>



-- 
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20100701/54807ccc/attachment-0001.html>


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