domingo, 25 de setembro de 2016

Dicas de Programação: Qual é a diferença entre && e & (ou || e I) em Javascript?

Uns vão dizer que, se usar o "&&", a primeira instrução, se retornar falso, será executada e a segunda instrução, não (e se usar o "||" a condição é ao contrário -- neste caso, verdadeiro) e se usar somente o "&" ou "|" as duas instruções serão executadas (não importa o resultado da outra).

Por exemplo:

var teste = 0; 

function igual(i, j) {
      teste++;
      return i === j;
}

teste = 0;
if (igual(1,2) && igual(1,3)) {}
console.log('[E LOGICO] Quantidade de vezes: ' + teste);
teste = 0;
if (igual(1,2) & igual(1,3)) {}
console.log('[E OPERADOR BINARIO] Quantidade de vezes: ' + teste);
teste = 0;
if (igual(1,1) || igual(2,2)) {}
console.log('[OU LOGICO] Quantidade de vezes: ' + teste);
teste = 0;
if (igual(1,1) | igual(2,2)) {}
console.log('[OU OPERADOR BINARIO] Quantidade de vezes: ' + teste);

Sim, isso é verdade. Mas também é verdade, os resultados das seguintes instruções (que esta no comentário ao lado da instrução console.log):

var a = 10 || 0;
console.log(a); //"10"
var b = 11 && 1;
console.log(b); //"1"
var c = 2 | 1;
console.log(c); //"3"
var d = 2 & 1;
console.log(d); //"0"

O por que disso?
Porque os operadores binários ("&" e "|") fazem o calculo binário entre os valores. Exemplo:

Número 1
Operador
Número 2
Resultado
00000001
AND
00000010
00000000
00000001
OR
00000010
00000011

E é por isso que eles, também, tem que executar as duas instruções (operadores lógicos - "&&" e "||" - só precisam saber se o resultado é true ou false).

Complicado? Hum... só um pouco. :P

Até mais!

Nenhum comentário: