SkillsTecnológicas
Menu
Conteúdo da trilha

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.

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

Duas pilhas desenhadas a lápis entram em uma balança de comparação e seguem por caminhos de resultado verdadeiro ou falso

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:

Mapa apresenta igualdade, diferença, menor, maior, menor ou igual e maior ou igual com a pergunta respondida por cada operador
Cada comparação é uma pergunta completa cuja resposta deve ser verdadeira ou falsa.
RelaçãoNotação comum em códigoResultado verdadeiro quando...
iguala == bos operandos são iguais segundo a regra do tipo
diferentea != bos operandos não são iguais
menora < bo primeiro vem antes do segundo na ordem definida
maiora > bo primeiro vem depois do segundo
menor ou iguala <= bo primeiro é menor ou está no limite
maior ou iguala >= bo 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 > 18 resulta em falso;
  • idade >= 18 resulta em verdadeiro;
  • idade < 18 resulta em falso;
  • idade <= 18 resulta em verdadeiro.
Linha numérica compara idades 17, 18 e 19 e mostra que maior ou igual a 18 inclui o limite enquanto maior que 18 o exclui
Uma única linha sob o operador muda o tratamento do valor exatamente na fronteira.

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:

  1. um valor imediatamente abaixo;
  2. o valor exatamente no limite;
  3. 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çãoO contrário é
a == ba != b
a < ba >= b
a > ba <= 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".

Painel compara quantidade com estoque, subtotal com limite de frete, cupom com código esperado e peso com limite, mostrando resultados verdadeiros ou falsos
Cada relação produz uma resposta lógica independente, pronta para ser nomeada e testada.
estoqueSuficiente ← quantidadeSolicitada <= estoqueDisponivel
atingiuFreteGratis ← subtotal >= limiteFreteGratis
cupomCorreto ← cupomInformado == cupomEsperado
ComparaçãoSubstituiçãoResultado
estoque suficiente?5 <= 8verdadeiro
atingiu frete grátis?199,90 >= 200,00falso
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