SkillsTecnológicas
Menu
Conteúdo da trilha

Conteúdo 19 de 20

Operadores lógicos

Combine e negue condições com E, OU e NÃO, usando tabelas-verdade, agrupamento explícito e curto-circuito para construir regras confiáveis.

Publicado em 10 de setembro de 202618 min de leituraSkills Tecnológicas

Trilhos desenhados a lápis representam uma porta dupla, uma junção alternativa e a inversão entre escuro e claro

O que são operadores lógicos

Operadores lógicos combinam ou negam condições. Enquanto uma comparação responde a uma pergunta — idade >= 16, por exemplo — um operador lógico conecta respostas para representar uma regra maior.

Considere uma inscrição com três perguntas:

  • a idade é permitida?
  • ainda há vaga?
  • o cadastro está bloqueado?

Cada pergunta produz verdadeiro ou falso. A inscrição pode exigir idade permitida E vaga disponível E NÃO estar bloqueada. A lógica deixa de analisar valores isolados e passa a relacionar condições.

Se ainda não estiver confortável com comparações, revise operadores relacionais. São eles que normalmente produzem os valores lógicos combinados nesta aula.

Os três operadores fundamentais

Em pseudocódigo, usaremos palavras para destacar o significado:

OperadorPergunta que representaQuando resulta em verdadeiro
Etodas as condições foram atendidas?todos os operandos são verdadeiros
OUpelo menos uma condição foi atendida?um ou mais operandos são verdadeiros
NÃOa condição deve ser invertida?o operando original é falso

Linguagens concretas usam sintaxes diferentes. Python possui and, or e not; JavaScript e C# usam frequentemente &&, || e !. O símbolo muda, mas a pergunta lógica continua sendo o ponto de partida.

Operador E: todos os critérios precisam passar

O operador E, chamado de conjunção, produz verdadeiro apenas quando as duas condições são verdadeiras.

idadePermitida <- idade >= 16
aindaHaVaga <- quantidadeInscritos < 120

requisitosBasicosAtendidos <- idadePermitida E aindaHaVaga

Uma pessoa de 18 anos com vaga disponível atende aos dois critérios. Uma pessoa de 18 anos quando o evento já está cheio não atende à regra completa: uma resposta falsa é suficiente para tornar o E falso.

Use E quando o requisito puder ser lido como “isto e também aquilo”. Documentos entregues E pagamento confirmado; usuário autenticado E permissão concedida; temperatura acima do mínimo E abaixo do máximo.

Operador OU: uma ou mais alternativas bastam

O operador OU, chamado de disjunção inclusiva, produz verdadeiro quando pelo menos uma condição é verdadeira.

possuiIngresso <- codigoIngressoValido
estaNaLista <- nomeEncontradoNaLista

entradaComprovada <- possuiIngresso OU estaNaLista

Há três formas de a expressão ser verdadeira: somente o ingresso é válido, somente o nome está na lista ou ambos são válidos. Esse último caso importa: por padrão, o OU lógico é inclusivo.

Quando a regra aceita exatamente uma alternativa, mas não as duas, trata-se de OU exclusivo, muitas vezes chamado de XOR. “Escolha entrega em casa ou retirada, mas não ambas” é uma regra exclusiva. Ela não deve ser representada como se fosse o OU inclusivo comum.

Operador NÃO: inverter uma condição

O operador NÃO, ou negação, atua sobre uma única condição:

cadastroBloqueado <- falso
podeProsseguir <- NÃO cadastroBloqueado

Se cadastroBloqueado é falso, NÃO cadastroBloqueado é verdadeiro. Se é verdadeiro, a negação é falsa.

Nomes positivos costumam deixar a expressão mais simples. Compare:

NÃO usuarioInativo

usuarioAtivo

As duas formas podem representar a mesma ideia, mas a segunda exige menos tradução mental. A negação é útil; uma sequência de nomes negativos e operadores NÃO é que torna a regra difícil de revisar.

Tabelas-verdade de E, OU e NÃO

Uma tabela-verdade enumera as entradas possíveis e o resultado do operador. E e OU recebem dois operandos, portanto têm quatro combinações. NÃO recebe um, então possui duas.

Três tabelas-verdade mostram que E só é verdadeiro com duas entradas verdadeiras, OU é verdadeiro com pelo menos uma entrada verdadeira e NÃO inverte verdadeiro e falso
Tabelas-verdade permitem verificar a regra sem depender de um caso intuitivo.
ABA E BA OU B
falsofalsofalsofalso
falsoverdadeirofalsoverdadeiro
verdadeirofalsofalsoverdadeiro
verdadeiroverdadeiroverdadeiroverdadeiro
ANÃO A
falsoverdadeiro
verdadeirofalso

As tabelas também servem como plano de teste. Se um algoritmo combina duas condições, verificar apenas o caso em que ambas são verdadeiras deixa três combinações sem confirmação.

Como construir uma condição composta

Uma expressão longa fica mais confiável quando nasce de perguntas pequenas e nomeadas. Para a inscrição no evento:

idadePermitida <- idade >= 16
aindaHaVaga <- quantidadeInscritos < 120
cadastroBloqueado <- situacaoCadastro = "bloqueado"

podeInscrever <- idadePermitida E aindaHaVaga E (NÃO cadastroBloqueado)

O processo é:

  1. comparar cada dado com a regra correspondente;
  2. guardar cada resposta lógica com um nome informativo;
  3. negar apenas o critério cujo significado precisa ser invertido;
  4. combinar as respostas com o conectivo expresso pela regra de negócio.
Fluxo mostra idade maior ou igual a 16 e quantidade menor que 120 combinadas com E, enquanto NÃO inverte cadastro bloqueado, formando a decisão pode inscrever
A expressão final fica legível porque cada comparação responde a uma pergunta independente.

Esse método também facilita o diagnóstico. Se podeInscrever for falso, é possível inspecionar idadePermitida, aindaHaVaga e cadastroBloqueado separadamente.

Agrupe a intenção com parênteses

Considere uma entrada permitida para quem tem ingresso, ou para quem está na lista e apresentou documento:

podeEntrar <- possuiIngresso OU (estaNaLista E apresentouDocumento)

Agora compare com outra regra:

podeEntrar <- (possuiIngresso OU estaNaLista) E apresentouDocumento

Na primeira, um ingresso válido basta. Na segunda, todas as pessoas precisam apresentar documento. Os mesmos operandos e operadores produzem regras diferentes por causa do agrupamento.

As linguagens definem precedência própria e frequentemente avaliam NÃO antes de E, e E antes de OU. Ainda assim, use parênteses para comunicar a regra, não apenas para corrigir a execução. A ordem completa será estudada na próxima etapa da trilha.

Negar uma regra composta

Negar uma expressão inteira não significa apenas trocar uma palavra. As leis de De Morgan ajudam a reescrever condições:

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)

Exemplo: negar “idade permitida E vaga disponível” significa “idade não permitida OU vaga não disponível”. Basta uma das falhas para negar o conjunto.

Distribuir o NÃO sem trocar E por OU altera a regra. Quando houver dúvida, monte a tabela-verdade das duas expressões e compare linha a linha.

Curto-circuito: o segundo lado pode nem ser avaliado

Muitas linguagens oferecem operadores lógicos condicionais com avaliação de curto-circuito:

  • em A E B, se A for falso, o resultado já é falso e B pode ser ignorado;
  • em A OU B, se A for verdadeiro, o resultado já é verdadeiro e B pode ser ignorado.
Dois fluxos mostram que E ignora a segunda condição quando a primeira é falsa e OU ignora a segunda condição quando a primeira é verdadeira
O curto-circuito interrompe a avaliação quando a primeira resposta já determina o resultado.

Isso pode proteger uma operação que só é válida após uma verificação:

divisaoValida <- divisor <> 0 E (total / divisor > 10)

Com curto-circuito, se divisor <> 0 for falso, a divisão não é executada. Mas essa garantia depende do operador e da linguagem. Em C#, por exemplo, && e || fazem avaliação condicional, enquanto & e | com booleanos avaliam ambos os lados.

Não esconda ações importantes no segundo operando:

cadastroValido E enviarConfirmacao()

Se a primeira condição for falsa, a função pode não executar. Prefira que condições apenas consultem valores e deixe ações explícitas no fluxo do algoritmo.

Operadores lógicos nem sempre devolvem apenas booleanos

No modelo lógico desta aula, as condições são booleanas e o resultado é interpretado como verdadeiro ou falso. Algumas linguagens dinâmicas também aceitam outros tipos, com regras de truthy e falsy.

Em Python, x and y e x or y retornam o último operando efetivamente avaliado, não obrigatoriamente True ou False. JavaScript também preserva valores de operandos com && e ||.

JavaScript: "" || "padrão"  resulta em "padrão"
Python:     "ok" and 7       resulta em 7

Esses recursos podem ser úteis, mas não são uma regra universal. Ao aprender lógica e ao escrever regras de negócio, combine comparações explícitas e confirme na documentação da linguagem quais tipos são aceitos, qual valor é retornado e se existe coerção. A revisão de tipos de dados ajuda a separar valor, tipo e interpretação lógica.

Teste todas as combinações relevantes

Para duas condições, comece pelas quatro linhas da tabela-verdade. Para a inscrição, registre primeiro apenas idade e vaga:

idadePermitidaaindaHaVagaresultado esperado de E
falsofalsofalso
falsoverdadeirofalso
verdadeirofalsofalso
verdadeiroverdadeiroverdadeiro

Depois acrescente a condição de bloqueio e escolha casos que façam cada parcela decidir o resultado. Um teste manual do algoritmo deve registrar entradas, condições intermediárias e resultado final, não apenas “funcionou”.

Erros comuns

Usar E quando a regra aceita alternativas

Se pagamento por cartão ou Pix é suficiente, exigir os dois torna a condição impossível ou restritiva demais. Traduza a frase de negócio antes de escolher o operador.

Presumir que OU significa exatamente um

O OU comum inclui o caso em que ambas as condições são verdadeiras. Modele o OU exclusivo separadamente quando a simultaneidade for proibida.

Esconder a intenção em uma expressão longa

Comparações nomeadas revelam qual parcela falhou e facilitam testes. Siga as mesmas práticas usadas para escrever pseudocódigo claro.

Criar dupla negação

NÃO naoPossuiPermissao obriga o leitor a inverter a frase duas vezes. Prefira possuiPermissao ou renomeie o estado.

Confiar que o segundo operando sempre executa

Curto-circuito pode impedir uma chamada no lado direito. Não dependa de efeitos colaterais dentro de condições.

Transportar coerções entre linguagens

Valor vazio, zero, ausência e objetos não recebem exatamente a mesma interpretação em toda linguagem. Consulte a documentação do ambiente usado.

Checklist para revisar uma expressão lógica

  • Cada operando produz uma condição compreensível?
  • E representa requisitos simultâneos?
  • OU representa alternativas e aceita ambas ao mesmo tempo?
  • A negação está aplicada ao trecho correto?
  • Os parênteses deixam o agrupamento evidente?
  • O resultado esperado foi testado para combinações falsas e verdadeiras?
  • O código depende indevidamente da avaliação do segundo operando?
  • Tipos, coerção e valor retornado foram confirmados na linguagem escolhida?

Pratique com uma regra de acesso

Um laboratório permite acesso quando a pessoa está cadastrada e possui treinamento válido. Em situações de manutenção, um supervisor também pode entrar, mas ninguém entra se o local estiver interditado.

  1. Crie cadastroAtivo, treinamentoValido, ehSupervisor e localInterditado.
  2. Escreva a regra principal com parênteses.
  3. Aplique a interdição a todas as alternativas.
  4. Teste uma pessoa comum apta, uma comum sem treinamento, um supervisor e qualquer pessoa durante interdição.

Uma expressão possível é:

podeEntrar <- ((cadastroAtivo E treinamentoValido) OU ehSupervisor) E (NÃO localInterditado)

Os parênteses deixam claro que a interdição vale tanto para a entrada comum quanto para a exceção do supervisor.

O que você deve guardar

E exige todos os critérios, OU aceita pelo menos um e NÃO inverte uma condição. Expressões confiáveis nascem de perguntas pequenas, nomes claros, agrupamento explícito e testes de todas as combinações importantes.

Curto-circuito, coerção e valor retornado variam entre operadores e linguagens. Use a lógica booleana como base, mas confirme a semântica concreta antes de depender desses detalhes. Agora aprenda como a precedência de operadores organiza expressões com cálculos, comparações e condições.

Referências