[Rio-pm] Chaves de hash

Aureliano Guedes guedes_1000 em hotmail.com
Terça Dezembro 4 08:14:44 PST 2012


Alguem passa um exemplo onde esteja evidente a diferença entre & && e and!
Um caso onde em um de certo e em outro não!

> From: blabos em gmail.com
> Date: Tue, 4 Dec 2012 14:00:45 -0200
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] Chaves de hash
> 
> Desculpa,
> 
> Não entendi a diferença entre:
> 
> perl -E 'sub a{say 1} sub b{say 2} if (a() && b()){}'
> perl -E 'sub a{say 1} sub b{say 2} if (a() and b()){}'
> 
> perl -E 'sub a{say 1;return 0} sub b{say 2} if (a() && b()){}'
> perl -E 'sub a{say 1;return 0} sub b{say 2} if (a() and b()){}'
> 
> Até onde eu sei, não existe operador de short circuit. O short circuit
> é uma propriedade, uma otimização na avaliação de expressões lógicas.
> 
> Alguém estamos viajando?
> 
> []'s
> 
> 2012/11/30  <thiagoglauco em ticursos.net>:
> >> Eu devo ser muito estúpido... mas alguém que está falando isso (ja é
> >> o 3o), poderia fazer o favor de me explicar porque ele deve usar && no
> >> lugar do 'and' e qual diferença isso faz no caso deste if específico?
> >> E em quais situações deve-se usar o 'and' no lugar de &&?
> >
> >
> > Não é estúpido não. Vamos analisar a tabela da verdade da função and ou &&:
> >
> > 0 x 0 = 0
> > 0 x 1 = 0
> > 1 x 0 = 0
> > 1 x 1 = 1
> >
> > Então, no if do código do nosso biólogo não haveria impacto real, sorry eu
> > me deixei levar por outras coisas que estava pensando aqui.
> >
> > Mas voltando ao if:
> >
> > if($keys >= $min and $keys <= $max)
> >
> > O operador de short circuit só avaliaria a expresssão da direita ($keys <=
> > $max) se a primeira expressão for verdadeira. Ou seja, se $keys for menor
> > que $min o Perl nem vai perder tempo checando pois 0 x N = 0. Então aqui eu
> > me enganei, não ia fazer diferença no código do nosso colega.
> >
> > Por outro lado, vamos supor um caso que você queira aproveitar o teste if e
> > executar duas subs na mesma linha de código:
> >
> > if ( &foo and &bar ){
> >    ...faça alguma coisa
> > }
> > else {
> >    ... &bar só será executada se &foo retornar true
> > }
> >
> > por outro lado:
> >
> > if ( &foo && &bar ){
> >    ...&foo e &bar foram executadas. faça alguma coisa
> > }
> > else {
> >    ... &foo e &bar foram executadas mesmo com o && retornando false.
> > }
> >
> > essa é a diferença.
> >
> > Em 2012-11-29 22:09, Bruno Buss escreveu:
> >>
> >> 2012/11/29 <thiagoglauco em ticursos.net>
> >>
> >>> Seu primeiro erro é o operador and. No documento perlop: $ perldoc perlop
> >>> você vai descobrir o seguinte:
> >>>
> >>>  " Logical And
> >>>      Binary "and" returns the logical conjunction of the two
> >>>      surrounding expressions.  It's equivalent to && except for
> >>>      the very low precedence.  This means that it short-circuits:
> >>>      i.e., the right expression is evaluated only if the left
> >>>      expression is true.
> >>> [...]
> >>>   C-style Logical And
> >>>      Binary "&&" performs a short-circuit logical AND operation.
> >>>      That is, if the left operand is false, the right operand is
> >>>      not even evaluated.  Scalar or list context propagates down
> >>>      to the right operand if it is evaluated."
> >>>
> >>> Logo, seu código
> >>>
> >>> if($keys >= $min and $keys <= $max){
> >>>
> >>> deveria ser if($keys >= $min && $keys <= $max){
> >>
> >>
> >> Eu devo ser muito estúpido... mas alguém que está falando isso (ja é
> >> o 3o), poderia fazer o favor de me explicar porque ele deve usar && no
> >> lugar do 'and' e qual diferença isso faz no caso deste if específico?
> >> E em quais situações deve-se usar o 'and' no lugar de &&?
> >>
> >> [ ]'s--
> >> Bruno C. Buss
> >> http://www.brunobuss.net [1]
> >>
> >>
> >> Links:
> >> ------
> >> [1] http://www.brunobuss.net
> >>
> >>
> >> _______________________________________________
> >> 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/20121204/92706c03/attachment.html>


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