Conteúdo 18 de 20
Operadores relacionais
Compare valores com igualdade, diferença e ordem, tratando limites, tipos, textos e aproximações para produzir resultados lógicos confiáveis.

Comparar é fazer uma pergunta sobre dois valores
Operadores relacionais verificam se uma relação entre operandos é verdadeira. A expressão idade >= 18 pergunta: a idade é maior ou igual a 18? O resultado não é a idade nem o limite; é um valor lógico: verdadeiro ou falso.
Esse resultado pode ser guardado em uma variável com nome informativo:
atingiuIdadeMinima ← idade >= 18
Na aula de operadores aritméticos, as expressões produziam números. Agora, as expressões transformam igualdade ou ordem em respostas lógicas que mais adiante poderão orientar decisões.
Os seis operadores de comparação
A notação varia entre pseudocódigos e linguagens, mas seis relações aparecem com frequência:
| Relação | Notação comum em código | Resultado verdadeiro quando... |
|---|---|---|
| igual | a == b | os operandos são iguais segundo a regra do tipo |
| diferente | a != b | os operandos não são iguais |
| menor | a < b | o primeiro vem antes do segundo na ordem definida |
| maior | a > b | o primeiro vem depois do segundo |
| menor ou igual | a <= b | o primeiro é menor ou está no limite |
| maior ou igual | a >= b | o primeiro é maior ou está no limite |
Alguns pseudocódigos usam = para igualdade e <> para diferença. Muitas linguagens usam == e !=. Confirme a sintaxe do ambiente antes de implementar.
Igualdade não é atribuição
Atribuição associa um valor a um nome. Comparação verifica uma relação e produz outro valor.
Nesta trilha, usamos uma seta para deixar a diferença visível:
idade ← 18
atingiuIdadeMinima ← idade == 18
Na primeira linha, idade recebe 18. Na segunda, idade == 18 é avaliado primeiro e produz verdadeiro; esse resultado é atribuído a atingiuIdadeMinima.
Linguagens que usam = para atribuição e == para igualdade tornam uma troca de símbolo capaz de causar erro ou comportamento inesperado. Leia a expressão em voz alta: “idade recebe 18” é diferente de “idade é igual a 18?”.
Menor e maior não incluem o limite
As expressões < e > são estritas. Se idade vale exatamente 18:
idade > 18resulta emfalso;idade >= 18resulta emverdadeiro;idade < 18resulta emfalso;idade <= 18resulta emverdadeiro.
A escolha não é estética; pertence à regra. “Maior de 18 anos” pode ser ambíguo em linguagem natural. Escreva a exigência de forma verificável: “idade mínima de 18 anos” corresponde a idade >= 18.
Para toda fronteira, teste três pontos:
- um valor imediatamente abaixo;
- o valor exatamente no limite;
- um valor imediatamente acima.
Inverta a relação com cuidado
Trocar a ordem dos operandos exige inverter o operador:
idade >= 18
18 <= idade
As duas expressões fazem a mesma pergunta. Já 18 >= idade pergunta se a idade é menor ou igual a 18.
Também existem pares de negação conceitual:
| Relação | O contrário é |
|---|---|
a == b | a != b |
a < b | a >= b |
a > b | a <= b |
Essa equivalência pressupõe valores comuns com uma ordem bem definida. Valores especiais, como NaN em ponto flutuante, exigem cuidado porque não obedecem a todas as intuições de ordem.
Compare grandezas compatíveis
Uma comparação precisa ter significado. pesoAtual < pesoLimite é coerente quando os dois valores representam peso na mesma unidade. Comparar diretamente 5 quilogramas < 800 gramas sem converter a unidade leva a uma conclusão errada, embora ambos sejam números.
Antes de comparar, verifique:
- o significado dos operandos;
- suas unidades;
- os tipos concretos;
- conversões necessárias;
- a política para ausência e valores inválidos.
Se for preciso harmonizar tipos ou unidades, faça a conversão de tipos de dados conscientemente antes da comparação.
Evite comparar um número com um texto que apenas parece numérico. JavaScript, por exemplo, possui igualdade estrita ===, que considera operandos de tipos diferentes como diferentes sem convertê-los. Outras operações e linguagens adotam regras próprias. Tornar os tipos compatíveis de forma explícita deixa o contrato mais claro.
Comparar textos exige uma regra
Igualdade textual pode considerar os caracteres exatamente como armazenados. Nesse caso, "Ana" e "ana" são diferentes. Espaços, acentos, normalização Unicode e maiúsculas também podem afetar o resultado.
Ordenar textos é ainda mais sensível. Uma comparação técnica pode usar pontos de código ou unidades internas da representação; uma lista de nomes para pessoas costuma exigir regras de idioma e localidade.
Por isso, responda antes:
- maiúsculas e minúsculas devem ser equivalentes?
- acentos devem ser preservados ou ignorados na comparação?
- a finalidade é verificar igualdade técnica, buscar ou ordenar para exibição?
- qual idioma ou localidade define a ordem?
Não use a ordem interna de caracteres como substituta automática para ordenação humana. Utilize as APIs de comparação e ordenação apropriadas da plataforma.
Igualdade de valor e identidade não são a mesma coisa
Dois objetos podem conter os mesmos dados e ainda serem instâncias diferentes. Algumas linguagens e tipos comparam conteúdo; outros comparam identidade; tipos personalizados podem redefinir a semântica de igualdade.
Com textos em C#, por exemplo, == compara o conteúdo. Para outras classes, a regra pode ser identidade ou uma implementação de igualdade definida pelo tipo. A pergunta “esses objetos são iguais?” precisa ser refinada:
- representam o mesmo valor?
- são a mesma instância na memória?
- possuem o mesmo identificador de domínio?
- todos os campos relevantes coincidem?
Nesta etapa da trilha, concentre-se em valores fundamentais. Ao trabalhar com objetos, consulte o contrato de igualdade do tipo.
Valores aproximados pedem tolerância
Números de ponto flutuante podem guardar aproximações. Uma sequência de cálculos que matematicamente resultaria em 0,3 pode produzir um valor muito próximo, mas não exatamente igual à representação escolhida para 0,3.
Em vez de perguntar sempre resultado == esperado, uma comparação aproximada verifica se a distância é aceitável:
diferenca ← valorAbsoluto(resultado - esperado)
aproximadamenteIgual ← diferenca <= tolerancia
A tolerância deve vir do problema: centésimos de grau, milímetros, margem estatística ou outra unidade significativa. Para escalas muito diferentes, pode ser necessário considerar tolerância absoluta e relativa. A função math.isclose do Python, por exemplo, combina esses dois critérios.
Não aplique tolerância indiscriminadamente a valores que exigem igualdade exata, como contagens, identificadores ou valores decimais modelados com garantias apropriadas.
O caso especial de NaN
NaN representa um resultado numérico indefinido em formatos de ponto flutuante. Ele não é igual a si mesmo, e comparações de ordem com ele normalmente resultam em falso. Verifique-o com a operação específica da linguagem, não com valor == NaN.
Comparações encadeadas não são universais
Para verificar se nota está entre zero e dez, a intenção contém duas relações:
limiteInferiorValido ← nota >= 0
limiteSuperiorValido ← nota <= 10
Na próxima aula, veremos como combinar essas duas respostas lógicas. Python permite escrever comparações encadeadas como 0 <= nota <= 10. C# e JavaScript não tratam essa forma da mesma maneira; em muitos contextos ela é inválida ou avalia uma comparação intermediária incompatível.
Em pseudocódigo portável, deixe as duas perguntas visíveis. Isso também facilita testar qual fronteira falhou.
Exemplo: comparações de um pedido
Considere um pedido com 5 unidades solicitadas, 8 em estoque, subtotal de 199,90, frete grátis a partir de 200,00 e cupom informado como "TECH10".
estoqueSuficiente ← quantidadeSolicitada <= estoqueDisponivel
atingiuFreteGratis ← subtotal >= limiteFreteGratis
cupomCorreto ← cupomInformado == cupomEsperado
| Comparação | Substituição | Resultado |
|---|---|---|
| estoque suficiente? | 5 <= 8 | verdadeiro |
| atingiu frete grátis? | 199,90 >= 200,00 | falso |
| cupom correto? | "TECH10" == "TECH10" | verdadeiro |
Nomes como estoqueSuficiente comunicam a pergunta melhor que teste1. Além disso, o resultado falso não é necessariamente erro: o subtotal simplesmente não atingiu a regra de frete grátis.
Ausência precisa ser tratada antes da ordem
Se dataEntrega pode estar ausente, a expressão dataEntrega < hoje talvez seja inválida ou tenha uma regra especial na linguagem. Primeiro determine se há valor; somente depois aplique uma comparação cronológica.
Não transforme ausência em zero, texto vazio ou uma data artificial apenas para permitir a comparação. Esses sentinelas podem entrar na ordem como se fossem valores reais.
Erros comuns
Confundir > com >=
O caso exatamente no limite revela o erro. Sempre teste a fronteira.
Comparar representações em vez de valores
"10" < "2" pode seguir ordem textual e produzir uma resposta diferente da comparação numérica 10 < 2.
Comparar aproximados por igualdade exata
Defina uma tolerância baseada no domínio quando a representação é aproximada.
Ignorar maiúsculas, acentos e localidade
Comparação textual técnica não garante a ordenação esperada por pessoas.
Presumir igualdade universal para objetos
Conteúdo e identidade são conceitos distintos; consulte a semântica do tipo.
Checklist de comparação
- Consigo formular a expressão como uma pergunta?
- O resultado esperado é lógico?
- Os operandos possuem significado, tipo e unidade compatíveis?
- O limite deve ser incluído ou excluído?
- Ausência foi tratada antes da ordem?
- Textos seguem a regra de idioma e sensibilidade correta?
- Valores aproximados possuem tolerância definida?
- Testei abaixo, no limite e acima?
Pratique com fronteiras
Um evento aceita inscrições de pessoas com idade mínima de 16 anos e permite no máximo 120 participantes. Para idade, teste 15, 16 e 17. Para quantidadeInscritos, teste 119, 120 e 121.
Crie duas variáveis lógicas, idadePermitida e aindaHaVaga, escrevendo uma comparação para cada uma. Depois faça um teste manual e registre os resultados.
As regras coerentes são idade >= 16 e quantidadeInscritos < 120 antes de aceitar uma nova inscrição. Observe que a primeira inclui o limite mínimo, enquanto a segunda rejeita uma nova pessoa quando o total já chegou ao máximo.
O que você deve guardar
Operadores relacionais transformam igualdade e ordem em valores lógicos. A correção depende da pergunta formulada, da compatibilidade dos operandos e do tratamento exato das fronteiras.
Igualdade, ordem textual, aproximação e identidade possuem regras próprias. Agora avance para operadores lógicos e aprenda a combinar os resultados dessas comparações com E, OU e NÃO.
Referências
- Microsoft Learn — C# Language Specification: Relational and type-testing operators. Acesso em 10 set. 2026.
- Microsoft Learn — C# equality comparisons. Acesso em 10 set. 2026.
- Python Documentation — Comparisons. Acesso em 10 set. 2026.
- Python Documentation —
math.isclose. Acesso em 10 set. 2026. - MDN Web Docs — Strict equality (
===). Acesso em 10 set. 2026. - MDN Web Docs — Less than (
<). Acesso em 10 set. 2026.