Operadores de comparação (Visual Basic)

Os exemplos a seguir mostram operadores de comparação definidos no Visual Basic.

Operador <

Operador <=

Operador >

Operador >=

Operador =

Operador <>

Operador Is

Operador IsNot

Operador Like

Esses operadores comparam duas expressões para determinar se são iguais e, caso contrário, as diferenças entre elas. Is, IsNot e Like são discutidos detalhadamente em páginas de Ajuda separadas. Os operadores de comparação relacional são discutidos detalhadamente nesta página.

Sintaxe

result = expression1 comparisonoperator expression2  
result = object1 [Is | IsNot] object2  
result = string Like pattern  

Partes

result
Obrigatórios. Um valor Boolean que representa o resultado da comparação.

expression1, expression2
Obrigatórios. Qualquer expressão.

comparisonoperator
Obrigatórios. Qualquer operador de comparação relacional.

object1, object2
Obrigatórios. Qualquer nome de objeto de referência.

string
Obrigatórios. Qualquer expressão de String .

pattern
Obrigatórios. Qualquer expressão String ou intervalo de caracteres.

Comentários

A tabela a seguir contém uma lista dos operadores de comparação relacional e as condições que determinam se result é True ou False.

Operador True se False se
< (Menor que) expression1 < expression2 expression1>= expression2
<= (Menor que ou igual a) expression1<= expression2 expression1 > expression2
> (Maior que) expression1 > expression2 expression1<= expression2
>= (Maior que ou igual a) expression1>= expression2 expression1 < expression2
= (Igual a) expression1 = expression2 expression1 <> expression2
<> (Não é igual a) expression1 <> expression2 expression1 = expression2

Observação

O = Operator também é usado como operador de atribuição.

O operador Is, o operador IsNot e o operador Like têm funcionalidades de comparação específicas que diferem dos operadores na tabela anterior.

Comparação de Números

Quando você compara uma expressão de tipo Single a um tipo Double, a expressão Single é convertida em Double. Esse comportamento é oposto ao comportamento encontrado no Visual Basic 6.

Da mesma forma, quando você compara uma expressão de tipo Decimal a uma expressão de tipo Single ou Double, a expressão Decimal é convertida em Single ou Double. Para expressões Decimal, qualquer valor fracionário menor que 1E-28 pode se perder. Essa perda de valor fracionário pode fazer com que dois valores sejam comparados como iguais, quando não são. Por esse motivo, você deve ter cuidado ao usar a igualdade (=) para comparar duas variáveis de ponto flutuante. É mais seguro testar se o valor absoluto da diferença entre os dois números é menor que uma pequena tolerância aceitável.

Imprecisão de ponto flutuante

Quando você trabalha com números de ponto flutuante, tenha em mente que eles nem sempre têm uma representação precisa na memória. Isso pode levar a resultados inesperados de determinadas operações, como a comparação de valores e Mod Operator. Para obter mais informações, consulte Tipos de dados de solução de problemas.

Comparando cadeias de caracteres

Quando você compara cadeias de caracteres, as expressões de cadeia de caracteres são avaliadas com base na ordem de classificação alfabética, que depende da configuração Option Compare.

Option Compare Binary embasa as comparações de cadeias de caracteres em uma ordem de classificação derivada das representações binárias internas dos caracteres. A ordem de classificação é determinada pela página de código. O exemplo a seguir mostra uma típica ordem de classificação binária.

A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø

Option Compare Text embasa as comparações de cadeias de caracteres em uma ordem de classificação de texto que diferencia maiúsculas de minúsculas, determinada pela localidade do sistema. Quando você define Option Compare Text e classifica os caracteres no exemplo anterior, a seguinte ordem de classificação de texto se aplica:

(A=a) < (À= à) < (B=b) < (E=e) < (Ê= ê) < (Ø = ø) < (Z=z)

Dependência de Localidade

Quando você define Option Compare Text, o resultado de uma comparação de cadeia de caracteres pode depender da localidade em que o aplicativo está em execução. Dois caracteres podem ser comparados como iguais em uma localidade, mas não em outra. Se você estiver usando uma comparação de cadeia de caracteres para tomar decisões importantes, como aceitar uma tentativa de logon, você deve estar atento à confidencialidade da localidade. Configure Option Compare Binary ou chame StrComp, que leva em conta a localidade.

Programação Sem Tipo com Operadores de Comparação Relacional

O uso de operadores de comparação relacional com expressões Object não é permitido em Option Strict On. Quando Option Strict é Off e expression1 ou expression2 é uma expressão Object, os tipos de tempo de execução determinam como eles são comparados. A tabela a seguir mostra como as expressões são comparadas e o resultado da comparação, dependendo do tipo de runtime dos operandos.

Se os operandos forem A comparação é
Ambos String Classifique a comparação com base nas características de classificação de cadeia de caracteres.
Ambos numéricos Objetos convertidos em Double, comparação numérica.
Um numérico e outro String A String é convertido em Double, uma comparação numérica é executada. Se não for possível converter String em Double, um InvalidCastException será gerado.
Um dos dois ou ambos são tipos de referência diferentes de String InvalidCastException é lançada.

As comparações numéricas tratam Nothing como 0. As comparações de cadeia de caracteres tratam Nothing como "" (uma cadeia de caracteres vazia).

Sobrecarga

Os operadores de comparação relacional (<, <=, >, >=, =, <>) podem ser sobrecarregados, o que significa que uma classe ou estrutura pode redefinir o comportamento deles, quando um operando tiver o tipo dessa classe ou estrutura. Se o código usar qualquer um desses operadores nessa classe ou estrutura, você deve entender o comportamento redefinido. Para obter mais informações, confira Procedimentos de operador.

Observe que = Operator pode ser sobrecarregado apenas como operador de comparação relacional, não como operador de atribuição.

Exemplo

O exemplo a seguir mostra vários usos de operadores de comparação relacional, que você aplica para comparar expressões. Os operadores de comparação relacional retornam um resultado Boolean, que representa se a expressão declarada é avaliada como True. Quando você aplica os operadores > e < a cadeias de caracteres, a comparação é feita usando a ordem de classificação alfabética normal das cadeias de caracteres. Essa ordem pode depender da configuração de localidade. Determinar se a classificação diferencia maiúsculas de minúsculas depende da configuração de Comparação de Opções.

Dim x As testClass
Dim y As New testClass()
x = y
If x Is y Then
    ' Insert code to run if x and y point to the same instance.
End If

No exemplo anterior, a primeira comparação retorna False e as comparações restantes retornam True.

Confira também