<br><div class="gmail_quote">Em 1 de julho de 2010 10:09, Solli Honorio <span dir="ltr">&lt;<a href="mailto:shonorio@gmail.com">shonorio@gmail.com</a>&gt;</span> escreveu:<br><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div class="gmail_quote"><div class="im">2010/7/1 GmailPaqui <span dir="ltr">&lt;<a href="mailto:cpaqui@gmail.com" target="_blank">cpaqui@gmail.com</a>&gt;</span><br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">





  

<div bgcolor="#ffffff" text="#000000">
Caros, bom dia!<div><div></div><div class="h5"><br>
<br>
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?<br>
Devo testar se hash está completo, pares de valor?  <br>
<br>
<div>-- <br>
<span style="font-family: Verdana,sans-serif; font-size: 10pt; color: rgb(102, 153, 204);">
<b>Cleive Paqui</b> <br>
<br>
</span> </div>
</div></div></div>

<br></blockquote><div><br>Cleive, <br><br>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.<br>


<br>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 - <a href="http://amzn.to/aDbCpR">http://amzn.to/aDbCpR</a> ) temos algumas recomendações sobre este assunto, sendo eles (não lembro de todos pois não estou com o PBP aqui agora) :<br>


<br>* 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);<br>


<br>* parâmetros <br>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;<br>


<br>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);<br><br>3o. é fortemente recomendado utilizar a técnica de &quot;named arguments&quot;. 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.<br>


<br>4o. considere retornar o resultado de uma função via um argumento de referencia.<br><br>Um exemplo, meu, para uma subrotina seria assim :<br><br>&lt;code&gt;<br><br>sub minha_rotina {<br>  my %args = @_;<br><br>  # verifica argumentos obrigatórios<br>


<br>  for my $arg ( qw (arg1 arg3 arg4 ) ) {<br>    die &quot;Argumento $arg é obrigatório mas não foi informado&quot; if ! exist $args{$arg};<br>  }<br><br>  ... faça alguma coisa com os argumentos ...<br><br>}<br><br>&lt;/code&gt;<br>


<br>Outras fontes sobre isto : <br><br><a href="http://www.perl.com/pub/a/2006/02/23/advanced_subroutines.html" target="_blank">http://www.perl.com/pub/a/2006/02/23/advanced_subroutines.html</a>   (mas por favor, nunca utilize prototypes)<br>


<a href="http://perldesignpatterns.com/?NamedArguments" target="_blank">http://perldesignpatterns.com/?NamedArguments</a><br><a href="http://www.devshed.com/c/a/Perl/Subroutines-in-Perl/3/" target="_blank">http://www.devshed.com/c/a/Perl/Subroutines-in-Perl/3/</a><br>


<a href="http://www.cs.cf.ac.uk/Dave/PERL/node126.html" target="_blank">http://www.cs.cf.ac.uk/Dave/PERL/node126.html</a><br><br></div><div class="im"><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">


_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br></blockquote></div></div><br><br clear="all"><br>-- <br><div><div></div><div class="h5">&quot;o animal satisfeito dorme&quot;. - Guimarães Rosa<br>



</div></div></blockquote></div><br><br clear="all"><br>-- <br>&quot;o animal satisfeito dorme&quot;. - Guimarães Rosa<br>