[Rio-pm] Chaves de hash
thiagoglauco em ticursos.net
thiagoglauco em ticursos.net
Sexta Novembro 30 04:13:27 PST 2012
> 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
Mais detalhes sobre a lista de discussão Rio-pm