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

Responder a