 VB.NET - Os novos operadores Lógicos AndAlso e OrElse.
 VB.NET - Os novos operadores Lógicos AndAlso e OrElse.
O VB.NET apresenta dois novos operadores lógicos 
que tem como objetivo lhe ajudar na arte de programar. Com eles programar fica 
um pouco , vamos dizer , mais lógico.
Estou falando dos novos operadores : AndAlso e OrElse.
O operador AndAlso veio substituir o operador And.
O operador OrElse veio substituir o operador Or.
| Nota: Os operadores And e Or (Xor) ainda existem no VB.NET e podem ser usados da mesma forma que sempre foram usados. Você lembra como eles funcionam ??? Vou explicar de forma bem rápida como funcionam para quem esta chegando agora: Operador And - Uma expressão contendo este operador somente será avaliada como True se ambas as condições forem verdadeiras. 
 Operador Or - Uma expressão contendo este operador será avaliada como True se apenas uma das condições for verdadeira. 
 | ||||||||||||||||||||||||
| Operador Xor - Uma avaliação o operador Xor somente será True quando apenas uma das expressões for igual a True. Se ambas expressões forem True a avaliação final será False. 
 Obs: O operador Not é usado para inverter o resultado de uma expressão lógica.Ex: Resultado = Not Expressão | 
Os operadores
AndAlso e OrElse possuem algumas propriedades que oferecem algumas vantagens de duas maneiras gerais:Estes novos operadores criam um 'curto circuito'(short circuit) em uma expressão desde que o resultado esteja garantido.
| Nota: Os 
    operadores lógicos do Visual Basic .NET são: 
 | 
O 'curto circuito' é uma recurso poderoso, especialmente quando tratamos com tipos de referência ou avaliação de expressões. Vejamos um exemplo
| If (Not x Is Nothing) and (x.y = 4) 
    then 
    Nota: Para contornar esta limitação 
    podemos fazer assim: | 
 
 | 
Sem utilizar o curto circuito (que é o que ocorre quando usamos AND) este código irá disparar uma exceção se x for igual a nothing , pois ambos os lados da operação serão avaliados e nothing multiplicado por algo causará um erro.
Outro exemplo bastante simples é o seguinte :
| If a < Valor1 And 
    b < (Valor2 / Valor3) Then ... End If | Vamos supor que os valores para as variáveis 
    sejam: Valor1 = 1 , Valor2 = 1, Valor3 = 0, a = 1 e b = 1 Neste caso teremos que avaliar a expressão: | 
Como não existe o curto circuito usando AND a expressão será totalmente avaliada e ocorrerá um erro em tempo de execução pois não existe divisão por zero.
Vamos agora repetir o código acima no VB.NET usando o operador
AndAlso no lugar de And:| Dim Valor1 As 
    Integer Dim Valor2 As Integer Dim Valor3 As Integer Dim a As Integer Dim b As Integer Valor1 = 1 Valor2 = 1 Valor3 = 0 a = 1 b = 1 If a > Valor1 AndAlso b > (Valor2 / Valor3) Then .......... End If | Ao 
    substituir o AND pelo AndAlso existente no VB.NET quando a 
    expressão for avaliada  o VB.NET já sabe que a expressão não pode ser  
    resolvida com sucesso  desde que a primeira parte da condição :   a não 
    ser maior que valor1 é falsa. Desta forma o VB.NET para de efetuar a avaliação da expressão e não irá gerar o erro. | 
Podemos então observar que ao colocarmos a expressão que for mais provável que seja False no lado esquerdo quando usamos AndAlso isto irá prevenir que o lado direito da expressão seja avaliado.
Apenas para lembrar, a precedência dos operadores no Visual Basic.NET é a seguinte:
| Categoria | Operador | Símbolo | Usando a tabela ao lado para analisar o exemplo abaixo temos: 10 > 8 And 20 < 40 And 11 <>11 True And True And False que resultará em : False 
 | 
| Aritmético | Exponenciação | ^ | |
| Aritmético | Negação | - | |
| Aritmético | Multiplicação 
    e divisão ponto-flutuante | *, / | |
| Aritmético | Divisão inteira | \ | |
| Aritmético | Modulo | Mod | |
| Aritmético | Adição e subtração | +, - | |
| Concatenação | Concatenação | & | |
| Lógico | Relacional | =, <>, <, >, <=, >=, Like, Is, TypeOf...Is | |
| Lógico | Condicional NOT | Not | |
| Lógico | Condicional AND | And, AndAlso | |
| Lógico | Condicional OR | Or, OrElse | |
| Lógico | Condicional XOR | Xor | 
O operador OrElse tem comportamento similar ao AndAlso e também implementa o curto circuito para a segunda operação se a primeira for igual a True. Se a primeira expressão avaliada for True a expressão inteira será True não importando o resultado da segunda expressão.
Afinal, um pouco de lógica não faz mal a ninguém...