Comparações e booleanos
Antes de um programa poder decidir qualquer coisa, ele precisa fazer uma pergunta que só tenha duas respostas: sim ou não. É daí que nasce toda decisão.
Estudar esta lição interativa →Até agora, nossos programas seguiam sempre em linha reta: uma instrução atrás da outra, na mesma ordem, todas as vezes. Mas programas de verdade precisam tomar decisões. Mostrar "aprovado" ou "reprovado" conforme a nota, liberar ou barrar o acesso conforme a idade, cobrar frete ou dar frete grátis conforme o valor da compra. Repare que essas três decisões, de áreas completamente diferentes, têm algo em comum: cada uma começa com uma pergunta que só pode ser respondida com sim ou não. A nota é 7 ou mais? A pessoa tem 18 anos? A compra passou de 100 reais?
No JavaScript, esse "sim ou não" tem tipo próprio: é o booleano, que você conheceu de relance no módulo passado e que só tem dois valores possíveis, true (verdadeiro) e false (falso). Um booleano é a menor informação que existe em um programa, mas é a base de tudo que envolve escolha: primeiro o programa pergunta, depois age conforme a resposta. Nesta lição cuidamos da pergunta; na próxima, da ação.
Pense num interruptor de luz: ele só tem dois estados, ligado ou desligado, sem meio-termo. Um booleano é um interruptor dentro do programa. Não existe "mais ou menos true": toda pergunta precisa, no fim das contas, deixar o interruptor numa das duas posições.
E como o programa faz essas perguntas? Do jeito mais direto possível: comparando dois valores. Uma comparação tem sempre o mesmo formato, um valor de cada lado e um símbolo de comparação no meio. O JavaScript olha os dois lados e responde:
Uma comparação é uma pergunta. O JavaScript olha os dois lados e a resposta é sempre um booleano: true ou false.
Alguns símbolos de comparação você já conhece da escola, como o maior que e o menor que. Outros são novidade por aqui, e dois pedem atenção na hora de digitar: o "maior ou igual" se escreve com os dois símbolos emendados, >=, sem espaço; e o "igual a" do JavaScript se escreve com três sinais de igual seguidos, === (é a primeira aparição dele no curso, e logo mais você entende o motivo de serem três). Este é o conjunto completo:
Maior / menor
> <Os mesmos da matemática: 10 > 5 pergunta "10 é maior que 5?".
Maior ou igual
>=Também aceita o empate: 7 >= 7 é true. O irmão <= faz o mesmo para o menor.
Igual a
===Três sinais de igual: só é true com o mesmo valor E o mesmo tipo.
Diferente de
!==O oposto do ===: é true quando os dois lados NÃO são iguais.
Veja o conjunto em ação, com a resposta de cada pergunta indo para o console:
// Comparações sempre resultam em true ou false.
console.log(10 > 5); // true
console.log(10 < 5); // false
console.log(10 >= 10); // true
console.log(3 === 3); // igualdade EXATA -> true
console.log(3 === "3"); // número vs texto -> false
console.log(3 !== 5); // diferente -> trueAgora, um detalhe que muda o jogo: a resposta de uma comparação é um valor como outro qualquer, então você pode guardá-la numa variável, do mesmo jeito que guarda um número ou um texto. E lembra da promessa do módulo passado, de que o operador de resto % serviria para separar pares de ímpares? Chegou a hora de pagá-la:
// A promessa do módulo passado: par ou ímpar?
// Todo número PAR dividido por 2 deixa resto 0.
const numero = 8;
const ehPar = numero % 2 === 0;
console.log(ehPar); // true
// A resposta é um booleano guardado numa variável
// com nome de pergunta. Troque o 8 por um número
// ímpar e rode de novo!Você vai encontrar por aí o == (dois sinais de igual), além do === (três). Eles parecem a mesma coisa, mas não são, e essa diferença já causou muito bug. O == faz conversões automáticas de tipo antes de comparar, o que gera resultados bizarros: por exemplo, 0 == "" (o número zero comparado com um texto vazio) dá true, o que quase nunca é o que você quer. Já o === compara valor e tipo, sem gambiarra: 3 === 3 é true, mas 3 === "3" é false, porque um é número e o outro é texto. A regra de ouro: use sempre === e !==, e esqueça as versões de dois sinais.
Repare no nome ehPar do exemplo. Programadores experientes dão às variáveis booleanas nomes que soam como perguntas de sim ou não: ehPar, temSaldo, podeVotar, estaLogado. Na próxima lição, quando essas variáveis entrarem nas decisões, o código vai se ler quase como português: "se pode votar, então...".
// Sua vez! Antes de rodar, tente adivinhar cada resultado (true ou false).
console.log(8 > 3);
console.log(10 === "10");
console.log(5 !== 5);
console.log(7 >= 7);Adivinhe, depois rode e confira.