Operadores Lógicos: E, OU, NÃO

O que vais aprender nesta aula:

  • O operador E (&&) - Tudo tem de ser verdade
  • O operador OU (||) - Basta um ser verdade
  • O operador NÃO (!) - Inverte o valor
  • Como tomar decisões complexas combinando várias regras

🧠 Teoria (com Analogia e Contexto Real)

Na vida real, raramente tomamos decisões baseadas numa única coisa. Geralmente, há várias condições envolvidas.

✈️ Analogia do Aeroporto

Imagina que vais apanhar um avião:

  • Operador E (&&): Para embarcar, precisas de Bilhete E Cartão de Cidadão. Se faltar um deles, não embarcas.
  • Operador OU (||): Para te identificares, podes mostrar o Cartão de Cidadão OU o Passaporte. Basta ter um deles para funcionar.
  • Operador NÃO (!): É o detetor de metais. Se NÃO tiveres metal, passas. Se tiveres, apita.

Porque é que isto importa? É a base de toda a lógica de negócio. "Se o utilizador for Premium E tiver saldo, aplica desconto". "Se o campo email estiver vazio OU a password for curta, mostra erro".

💡 Sabias que? O operador ! (NÃO) é muitas vezes chamado de "Bang". Podes usá-lo duas vezes (!!) para converter qualquer valor num booleano verdadeiro ou falso puro.

💻 Prática (Orientada e Progressiva)

Vamos testar a lógica do computador:

Exemplo 1: Operador E (&&)

Só devolve true se ambos forem verdadeiros.

let tenhoBilhete = true;
let tenhoCC = true;
let possoEmbarcar = tenhoBilhete && tenhoCC;

console.log(possoEmbarcar); // true

// Se perder o CC...
tenhoCC = false;
console.log(tenhoBilhete && tenhoCC); // false

Exemplo 2: Operador OU (||)

Devolve true se pelo menos um for verdadeiro.

let souSocio = false;
let tenhoConvite = true;

// Entra se for sócio OU se tiver convite
let podeEntrar = souSocio || tenhoConvite;

console.log(podeEntrar); // true

Exemplo 3: Operador NÃO (!)

Inverte o valor booleano.

let estaChovendo = true;

let vouAPraia = !estaChovendo;

console.log(vouAPraia); // false (porque está a chover)
⚠️
Ordem Importante: Tal como na matemática o * ganha ao +, na lógica o && (E) tem prioridade sobre o || (OU).
Usa parênteses para garantir que a lógica está correta: (A || B) && C.

✅ Verificação de Conhecimento

1. O resultado de true && false é?

true
false
undefined

2. O resultado de false || true é?

true
false
null

3. O que faz o operador ! (Ex: !true)?

Confirma que é verdadeiro.
Apaga a variável.
Inverte o valor (torna-se false).

🧩 Desafio Prático

Sistema de Aprovação Escolar

Um aluno passa de ano se:

  1. A média for igual ou superior a 10 (media >= 10)
  2. E tiver menos de 10 faltas (faltas < 10)

Cria um programa que diga se o aluno passou ou não.

// Testa com media=12 e faltas=5 (Deve passar)
// Testa com media=15 e faltas=15 (Não deve passar)
Mostrar Solução
let media = 12;
let faltas = 5;

// Regra: Média >= 10 E Faltas < 10
let passouDeAno = media >= 10 && faltas < 10;

console.log("O aluno passou? " + passouDeAno);

📌 Explicação: Usámos o operador && porque AMBAS as condições são obrigatórias. Se o aluno tiver boas notas mas muitas faltas, chumba. Se tiver poucas faltas mas más notas, chumba também.