programandoai

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 &gt; 5 pergunta "10 é maior que 5?".

Maior ou igual

>=

Também aceita o empate: 7 &gt;= 7 é true. O irmão &lt;= 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 -> true

Agora, 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!
Use sempre ===

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.

Nomes que soam como perguntas

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.

← Voltar ao índice do curso