programandoai

Condições compostas: e, ou e não

Muitas decisões reais dependem de mais de uma coisa ao mesmo tempo: só entra na balada se tiver idade e ingresso. É isso que os operadores lógicos resolvem.

Estudar esta lição interativa →

Uma pergunta de sim ou não sozinha nem sempre é suficiente. Pense em liberar a entrada numa festa: é preciso ter idade mínima e ter o ingresso, as duas coisas ao mesmo tempo. Ou pense num aviso de carrinho: ele deveria aparecer se o carrinho estiver vazio ou se o cliente não estiver logado, qualquer uma das duas situações já basta. Para esse tipo de decisão, combinamos condições com os operadores lógicos: && (e), || (ou) e ! (não).

let idade = 20;
let temIngresso = true;

if (idade >= 18 && temIngresso) {
  console.log("Pode entrar.");
}

if (idade < 18 || !temIngresso) {
  console.log("Não pode entrar.");
}

Rode e depois troque idade para 15 para ver o outro caminho acontecer.

&& (e) só é verdadeiro quando as duas condições ao redor dele forem verdadeiras; se qualquer uma delas for falsa, o resultado inteiro é falso. Já || (ou) é verdadeiro quando pelo menos uma das duas condições for verdadeira, mesmo que a outra seja falsa. E ! (não) simplesmente inverte um valor: transforma verdadeiro em falso, e falso em verdadeiro.

Pense em duas chaves para abrir um cofre. Se o cofre exige as duas chaves ao mesmo tempo, isso é um &&: falta uma, o cofre não abre. Se o cofre aceita qualquer uma das duas chaves, isso é um ||: basta ter uma delas. E ! é o oposto de uma chave: uma "anti-chave" que só funciona quando a chave normal não funcionaria.

Leia em voz alta para não errar o operador

Quando a condição composta ficar confusa, uma boa prática é ler em voz alta, em português: "se a idade for maior ou igual a 18 e tiver ingresso". Se a frase pedir "e" (as duas coisas precisam ser verdade), use &&. Se a frase pedir "ou" (qualquer uma das duas já resolve), use ||. Essa tradução simples evita boa parte dos erros de lógica composta.

Trocar e por ou (ou vice-versa) não quebra o programa: só erra silenciosamente

Assim como trocar + por * no Módulo 2, usar || onde deveria ser && é um erro lógico, não de sintaxe: o código roda sem reclamar nada, só toma a decisão errada em algumas situações. É um dos bugs mais difíceis de perceber, porque só aparece em certas combinações de valores. Sempre que uma condição composta se comportar de um jeito inesperado, vale testar cada combinação de verdadeiro/falso separadamente.

let carrinhoVazio = false;
let clienteLogado = false;

if (carrinhoVazio && !clienteLogado) {
  console.log("Mostrar aviso.");
} else {
  console.log("Tudo certo.");
}

Troque && por || e rode.

Uma loja dá frete grátis quando o total da compra é de pelo menos 100 reais ou o cliente é VIP (ehVip), mas nunca quando o endereço está fora da área de entrega (foraDaArea). Guarde em freteGratis o resultado (true ou false) e, com if/else, guarde em aviso o texto "Frete grátis" ou "Frete: R$ 15,00".
let total = 120;
let ehVip = false;
let foraDaArea = false;

// crie freteGratis combinando as três informações com &&, || e !
let freteGratis;

// use if/else para guardar em aviso o texto certo
let aviso = "";

🧩 Este é um exercício com correção automática — abra no app para completá-lo e verificar.

← Voltar ao índice do curso