[Rio-pm] Chaves de hash

Tiago Peczenyj tiago.peczenyj em gmail.com
Terça Dezembro 4 08:23:46 PST 2012


brinque com os valores

https://gist.github.com/4205775

1,0
0,1
6,666
666,6

etc

2012/12/4 Aureliano Guedes <guedes_1000 em hotmail.com>

>  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
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20121204/60d6f979/attachment.html>


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