brinque com os valores https://gist.github.com/4205775
1,0 0,1 6,666 666,6 etc 2012/12/4 Aureliano Guedes <[email protected]> > 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: [email protected] > > Date: Tue, 4 Dec 2012 14:00:45 -0200 > > > To: [email protected] > > 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 <[email protected]>: > > >> 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 <[email protected]> > > >> > > >>> 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 > > >> [email protected] > > >> http://mail.pm.org/mailman/listinfo/rio-pm > > > > > > > > > _______________________________________________ > > > Rio-pm mailing list > > > [email protected] > > > http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > > Rio-pm mailing list > > [email protected] > > http://mail.pm.org/mailman/listinfo/rio-pm > > _______________________________________________ > Rio-pm mailing list > [email protected] > http://mail.pm.org/mailman/listinfo/rio-pm > -- Tiago B. Peczenyj Linux User #405772 http://pacman.blog.br
_______________________________________________ Rio-pm mailing list [email protected] http://mail.pm.org/mailman/listinfo/rio-pm
