A dica de hoje é sobre o operador XOR, que eu achei bem interessante. Estava estudando outra coisa e apareceu essa informação, então resolvi checar e realmente faz muito sentido.
Imagine que temos duas variáveis:
let a = 3
let b = 4
Eu quero simplesmente colocar A em B e B em A, geralmente faríamos uma variável TMP, colocaríamos A, colocaríamos A = B e em seguida B = TMP:
let TMP = a
a = b
b = TMP
Precisamos de mais uma variável para conseguir fazer essa troca. Se a gente quisesse fazer utilizando o XOR, é possível:
a = a ^ b
b = a ^ b
a = a ^ b
console.log(a, b)
Com isso conseguimos inverter os valores, essa é uma forma diferente de fazer troca de valores. Algo que acho muito legal na nossa área é quando começamos a pegar operadores que nem são tão famosos, como o XOR mesmo, e começamos a ter alguns usos incomuns.
Imaginamos que em binário seria:
3 | 011
4 | 100
Então no primeiro XOR nós teriamos de resultado o 1
a | 111
Agora vamos pegar nosso x que agora é o valor de A e fazer com o B:
a | 111
4 | 100
Nosso resultado sera:
b | 011
Agora faremos um terceiro XOR com o A:
b | 011
a | 111
E o resultado será:
a | 100
Perceba que o A agora é 100, que é 4, e o B ficou com 011, que é 3. O legal é que se formos lembrar daquele algoritmo que fizemos de achar os pares que estão faltando, é o mesmo caso porque a medida que nós aplicamos duas vezes o mesmo número, em cima nós removemos, então podemos adicionar ele com outro e tirar o que não queremos. Resumindo, colocamos em A a soma de A com B, em B nós somamos B novamente.
Obviamente ele só funciona com tipos de variáveis numéricas e do mesmo tipo, no nosso exemplo são dois inteiros.
Confira o vídeo:
E Deixe suas dúvidas e sugestões nos comentários. Curta o DevPleno no Facebook, inscreva-se no canal e não se esqueça de cadastrar seu e-mail para não perder as novidades. Abraço!
Mestre em Sistemas de Informação pela USP e criador do DevPleno. Iniciou sua carreira como professor com apenas 18 anos em um curso técnico, foram 11 anos em sala de aula formando desenvolvedores fullstack no sul de Minas Gerais.