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: bla...@gmail.com > Date: Tue, 4 Dec 2012 14:00:45 -0200 > To: rio-pm@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 <thiagogla...@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 <thiagogla...@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@pm.org > >> http://mail.pm.org/mailman/listinfo/rio-pm > > > > > > _______________________________________________ > > Rio-pm mailing list > > Rio-pm@pm.org > > http://mail.pm.org/mailman/listinfo/rio-pm > _______________________________________________ > Rio-pm mailing list > Rio-pm@pm.org > http://mail.pm.org/mailman/listinfo/rio-pm
_______________________________________________ Rio-pm mailing list Rio-pm@pm.org http://mail.pm.org/mailman/listinfo/rio-pm