Condições compostas com operadores lógicos
Combine critérios com E, OU e NÃO, organize agrupamentos e teste regras compostas sem perder clareza.

Uma condição composta reúne perguntas menores
Uma condição composta combina duas ou mais expressões lógicas para produzir uma única resposta: verdadeiro ou falso. Essa combinação permite representar regras que dependem de vários critérios.
Considere uma área restrita. Para liberar a entrada, a credencial precisa estar válida e a pessoa não pode estar bloqueada:
SE credencialValida E NÃO bloqueado ENTÃO
liberar acesso
SENÃO
negar acesso
FIM SE
credencialValida e bloqueado são perguntas menores. O operador E exige que as duas partes da condição final sejam verdadeiras. NÃO inverte bloqueado: uma pessoa não bloqueada satisfaz esse critério.
Essa expressão pode ser usada dentro da estrutura estudada em como funciona if e else. O if continua escolhendo o caminho; a diferença é que sua pergunta agora possui mais de um componente.
Escolha o operador pela relação entre os critérios
Os três operadores fundamentais representam relações diferentes:
E: todos os critérios conectados precisam ser verdadeiros;OU: ao menos um critério precisa ser verdadeiro;NÃO: inverte o resultado do critério ao qual se aplica.
E acumula exigências, OU oferece alternativas e NÃO inverte uma pergunta.Compare as regras:
temIngresso E documentoValido
A entrada depende dos dois requisitos.
pagamentoEmDinheiro OU pagamentoEmCartao
Qualquer uma das formas atende a regra. Esse OU normalmente é inclusivo: se as duas forem aceitas, o resultado também é verdadeiro. Quando apenas uma alternativa deve existir, a exclusividade precisa ser declarada e verificada separadamente.
NÃO contaBloqueada
A condição é verdadeira quando contaBloqueada é falsa. Prefira nomes que permitam leitura direta; contaAtiva pode ser mais simples do que acumular negações.
Para revisar os resultados de todas as combinações possíveis, consulte a aula de operadores lógicos.
Traduza a regra antes de escrever a expressão
Vamos ampliar a política de acesso:
O acesso é liberado quando a credencial está válida, a pessoa está dentro do horário permitido ou possui autorização especial, e não está bloqueada.
Separe os critérios atômicos — perguntas que já podem ser respondidas sem outro operador lógico:
credencialValida
horarioPermitido
autorizacaoEspecial
bloqueado
Depois identifique as relações:
- credencial válida é obrigatória;
- horário permitido e autorização especial são alternativas;
- ausência de bloqueio também é obrigatória.
A condição resultante é:
credencialValida E (horarioPermitido OU autorizacaoEspecial) E NÃO bloqueado
E mantêm os requisitos obrigatórios.Leia de dentro para fora: primeiro verifique se existe horário permitido ou autorização especial. Depois exija esse resultado junto da credencial válida e da ausência de bloqueio.
Parênteses tornam o agrupamento explícito
Sem parênteses, esta expressão fica mais difícil de conferir:
credencialValida E horarioPermitido OU autorizacaoEspecial E NÃO bloqueado
Dependendo da precedência, ela pode ser interpretada como:
(credencialValida E horarioPermitido) OU
(autorizacaoEspecial E NÃO bloqueado)
Isso permitiria que uma pessoa com autorização especial e sem bloqueio passasse mesmo com credencial inválida. Não é a política descrita.
A forma intencional é:
credencialValida E
(horarioPermitido OU autorizacaoEspecial) E
NÃO bloqueado
Em muitas linguagens, negação possui precedência maior que conjunção, e conjunção possui precedência maior que disjunção. Mesmo assim, parênteses úteis documentam quais critérios pertencem ao mesmo grupo. A aula sobre precedência de operadores e construção de expressões explica como calcular e revisar esses agrupamentos.
Não coloque parênteses em torno de cada palavra por hábito. Agrupe unidades conceituais: alternativas, exceções e sub-regras que precisam permanecer juntas.
Use nomes intermediários para revelar a regra
Uma condição longa pode ser dividida em resultados lógicos nomeados:
possuiJanelaDeAcesso <- horarioPermitido OU autorizacaoEspecial
podeEntrar <- credencialValida E possuiJanelaDeAcesso E NÃO bloqueado
SE podeEntrar ENTÃO
liberar acesso
SENÃO
negar acesso
FIM SE
Essa versão não muda a lógica. Ela expõe duas ideias: “possui janela de acesso” e “pode entrar”. Também permite observar cada resultado durante um teste.
Nomes intermediários ajudam quando:
- uma sub-regra possui significado próprio;
- a mesma combinação é usada mais de uma vez;
- a expressão não cabe confortavelmente em uma linha;
- você precisa descobrir qual critério falhou;
- uma regra de negócio será revisada por pessoas não técnicas.
Evite nomes vagos como teste1, regraOk ou validacaoFinal. Um bom nome pode ser lido como uma afirmação verdadeira ou falsa.
Como escrever a condição em linguagens diferentes
Em pseudocódigo, usamos palavras:
SE credencialValida E
(horarioPermitido OU autorizacaoEspecial) E
NÃO bloqueado ENTÃO
liberar acesso
FIM SE
Python também usa palavras, em minúsculas:
if (
credencial_valida
and (horario_permitido or autorizacao_especial)
and not bloqueado
):
liberar_acesso()
JavaScript e C# normalmente usam &&, || e !:
if (
credencialValida &&
(horarioPermitido || autorizacaoEspecial) &&
!bloqueado
) {
liberarAcesso();
}
if (
credencialValida &&
(horarioPermitido || autorizacaoEspecial) &&
!bloqueado
)
{
LiberarAcesso();
}
Python e JavaScript possuem regras de truthiness e seus operadores podem retornar operandos em vez de um booleano literal. C# e Java exigem operandos booleanos nesse contexto. Para aprender lógica transferível entre linguagens, formule primeiro perguntas explícitas e confira depois as regras de tipo da implementação.
Curto-circuito pode interromper a avaliação
Operadores condicionais normalmente avaliam da esquerda para a direita e param quando o resultado já está determinado:
- em
A E B, seAfor falso, o resultado já é falso;Bnão precisa ser avaliado; - em
A OU B, seAfor verdadeiro, o resultado já é verdadeiro;Bnão precisa ser avaliado.
Esse comportamento é chamado avaliação de curto-circuito.
Uma aplicação comum protege uma operação que só é segura depois de outra verificação:
clienteExiste E cliente.estaAtivo
Se clienteExiste for falso, acessar cliente.estaAtivo poderia ser inválido. Com um operador de conjunção de curto-circuito, o segundo termo não é avaliado.
A ordem, portanto, importa para segurança e custo. Coloque primeiro a verificação que torna as seguintes válidas. Quando duas condições são seguras, uma verificação barata e capaz de determinar cedo o resultado costuma vir antes de uma consulta cara.
Não dependa de efeitos colaterais no termo direito:
condicaoJaSuficiente OU registrarAuditoria()
Se a primeira parte for verdadeira, registrarAuditoria() pode não executar. Ações obrigatórias devem ser instruções explícitas, não consequências acidentais da avaliação de uma condição.
Também diferencie operadores de curto-circuito de operadores que sempre avaliam os dois lados. Em C#, por exemplo, && e || são condicionais, enquanto & e | com booleanos avaliam ambos. Confira a documentação da linguagem usada.
Negue a pergunta certa
Compare:
NÃO bloqueado E credencialValida
com:
NÃO (bloqueado E credencialValida)
Na primeira, a negação afeta somente bloqueado. Na segunda, afeta o resultado do grupo inteiro. Os significados não são iguais.
Ao negar um grupo, as relações internas mudam. As leis de De Morgan mostram equivalências úteis:
NÃO (A E B) equivale a (NÃO A) OU (NÃO B)
NÃO (A OU B) equivale a (NÃO A) E (NÃO B)
Por exemplo, “não possui documento e ingresso ao mesmo tempo” é diferente de “não possui documento nem ingresso”. Na dúvida, monte os casos possíveis ou reescreva a regra em frases curtas antes de codificar.
Teste alterando um critério por vez
Uma condição composta precisa de casos que revelem a influência de cada parte. Para a política de acesso, considere:
| Caso | Credencial | Horário | Autorização | Bloqueado | Resultado |
|---|---|---|---|---|---|
| acesso comum | válida | permitido | não | não | liberar |
| exceção autorizada | válida | fora | sim | não | liberar |
| sem alternativa | válida | fora | não | não | negar |
| credencial inválida | inválida | permitido | não | não | negar |
| bloqueio prevalece | válida | permitido | sim | sim | negar |
O segundo e o terceiro casos isolam o grupo horarioPermitido OU autorizacaoEspecial. O primeiro e o quarto alteram a credencial mantendo o horário permitido. O primeiro e o quinto verificam se o bloqueio realmente impede o acesso.
Acrescente valores-limite às comparações que originam os booleanos. Se horarioPermitido significa hora >= 8 E hora < 18, teste instantes antes, exatamente no início, antes do fim e exatamente no fim.
Durante um teste manual, registre os resultados intermediários e observe quais termos não foram avaliados por curto-circuito.
Erros comuns em condições compostas
Usar OU quando todos os requisitos são obrigatórios
Se documento e ingresso são exigidos, documentoValido OU ingressoValido libera quem possui apenas um. Traduza “ambos”, “todos” e “também” como pistas de conjunção.
Usar E entre alternativas
Se pagamento pode ser por cartão ou Pix, exigir os dois meios ao mesmo tempo contradiz a regra. Palavras como “qualquer um” e “pelo menos um” indicam disjunção inclusiva.
Confiar em precedência sem mostrar intenção
Mesmo quando a linguagem interpreta corretamente, leitores podem agrupar de outro modo. Use parênteses para sub-regras relevantes.
Acumular negações
Expressões como NÃO usuarioNaoAutorizado aumentam a carga de leitura. Prefira nomes positivos quando eles representam fielmente o domínio.
Misturar cálculo, acesso inseguro e efeitos colaterais
Uma condição deve ser previsível. Separe ações e ordene verificações que protegem as seguintes.
Testar somente todas verdadeiras e todas falsas
Esses extremos não revelam qual operador está errado. Varie um critério relevante por vez e inclua fronteiras.
Pratique com uma política de desconto
Uma loja concede desconto quando:
- a compra é de pelo menos R$ 300;
- o cliente é fidelidade ou possui um cupom válido;
- o produto não está em promoção.
Escreva critérios intermediários e depois a condição:
valorSuficiente <- valorCompra >= 300
possuiBeneficio <- clienteFidelidade OU cupomValido
produtoElegivel <- NÃO produtoEmPromocao
recebeDesconto <- valorSuficiente E possuiBeneficio E produtoElegivel
Teste pelo menos: cliente fidelidade sem cupom, cliente com cupom sem fidelidade, compra de 299, compra de 300 e produto já promocional. Explique qual termo torna o resultado falso em cada recusa.
O que você deve guardar
Uma condição composta continua produzindo uma única resposta, mas essa resposta nasce de critérios menores. Use E para requisitos simultâneos, OU para alternativas inclusivas e NÃO para inverter a pergunta correta.
Modele a regra em linguagem natural, isole critérios atômicos, agrupe sub-regras com parênteses e nomeie resultados intermediários quando isso facilitar a leitura. Considere o curto-circuito ao ordenar termos e teste combinações que revelem a contribuição de cada critério. Em seguida, aprenda a organizar condicionais encadeadas e aninhadas quando uma única condição não for suficiente.
Referências
- Microsoft Learn — Boolean logical operators. Acesso em 10 set. 2026.
- Microsoft Learn — C# Language Specification: conditional logical operators. Acesso em 10 set. 2026.
- Python Documentation — Operações booleanas. Acesso em 10 set. 2026.
- MDN Web Docs — AND lógico (
&&). Acesso em 10 set. 2026. - Oracle — Java Language Specification: Conditional-And e Conditional-Or. Acesso em 10 set. 2026.