Desenvolvimento - Visual Basic .NET

VB.NET: Estudo da linguagem - Parte 7

Confira a sétima parte do estudo sobre Visual Basic .Net (VB.NET).

por Paulo Cesar Macedo



Importante:
Esse estudo foi uma compilação dos seguintes textos feita pelo autor:
MSDN Visual Studio 2002/2003 (tradução da fonte original do site da Microsoft)
Livro: Programando em Visual Basic de Michael J. Young.
Livro: Visual Basic for Windows de Steven Holzner.
Livro: Visualização e realidade virtual de Lee Adams.

1.14 – Operadores

Operadores são unidades de código que executam uma operação e retornam elementos como resultado. Podem ocorrer operações aritméticas; operações de concatenação; operações de comparação; operações lógicas.

Os operações de atribuição e os operadores gerais, entretanto podem não retornar elementos como resultado, apenas executam operações gerais.

  1. Operadores aritméticos

Considere as variáveis abaixo :

Dim X as integer

Dim Y as integer

Dim Z as double

Soma : X = 4 + 3 retorna 7

Subtração : X = 4 – 3 retorna 1

Y = – X ainda utilizando o exemplo acima – X retorna -1 (Muda o sinal)

Multiplicação : Y = 5 * 5.55 retorna 28 porque Y é Integer e arredonda números decimais

Divisão : Y = 4 / 3 retorna 1 porque Y é Integer e arredonda números decimais

Exponenciação : Y = 4 ^ 2 retorna 16

Divisão Inteira : Y = 23 \ 5 retorna 4


  • A divisão inteira retorna o número de vezes que um número pode ser divido por outro, no exemplo acima 23 pode ser dividido por 5 apenas 4 vezes. Em outras palavras, divisão inteira retorna apenas a parte inteira da divisão.

Módulo Aritmético : Y = 5 Mod 2 retorna 1

  • O módulo aritmético retorna apenas o resto da divisão entre dois inteiros.

Z = 100.3 Mod 4.13 retorna 1.18

  • O módulo aritmético retorna apenas o resta da divisão em ponto flutuante se os dois divisores forem ponto flutuante.

Divisão por Zero :

  • Pode retornar NaN se for zero.
  • Pode retornar +Infinito (>0)
  • Pode retornar –Infinito (<0)

  1. Operadores de Comparação

Esses operadores comparam duas expressões e retornam um valor Boolean como resultado.

Comparação entre números :

Igualdade ( = ) : 23 = 23 retorna True

Diferença (<>) : 23 <> 23 retorna False

Maior que (>) : 23 > 2 retorna True

Menor que (< ) : 23 < 2 retorna False

Menor ou igual (<=) 23 <= 23 retorna True

Maior ou igual (>=) 23 >= 23 retorna True

Comparação entre strings :

O compilador usa o operador Like interno para executar as comparações entre strings usando um padrão, se o padrão for igual retorna True senão retorna False, funcionando da mesma forma que os números. Exemplo :

“73” > “9” retorna True

“73” = “73” retorna True

“aaa” > “aa” retorna True

No primeiro exemplo o compilador usou um padrão de ordem de classificação para comparar duas strings, o padrão especifica que 73 está em último lugar na ordem de classificação então a comparação > é True. No segundo exemplo, as duas strings têm a mesma ordem de classificação e a comparação é = , portanto o resultado é True. No terceiro exemplo, a string “aaa” tem um prefixo a mais que “aa”e toda a string maior é classificado primeiro que a string menor, logo o resultado é True.

O padrão de comparação é alterado pelo comando de comparação Option Compare.

Option Compare

O comando Option Compare indica ao compilador o padrão para comparar strings. O comando possui esta sintaxe :

Option Compare Text

Option Compare Binary

Option Compare Binary – (Default) O compilador reconhece o ordem de classificação dos caracteres da seguinte forma :

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

Assim, os caracteres em maiúsculos, acentuados, e outros possuem uma ordem de classificação binária interna no VB, segundo a ordem acima.

Option Compare Text – O compilador reconhece a ordem de classificação dos caracteres de forma insensitiva, isto é não importa se os caracteres estão em maiúsculos ou minúsculos. Assim :

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

Exemplo :

" Muda o comportamento das comparações para Binário.

Option Compare Binary " "AAA" é menor que "aaa".

" Muda o comportamento das comparações para Texto.

Option Compare Text " "AAA" é igual à "aaa".

Comparação entre Objetos

Para comparar objetos é obrigatório usar o operador Is. O compilador compara os 2 objetos testando se eles se referem a mesma cópia (instância) de um objeto.Exemplo :

Dim x As MyClass
Dim y As New MyClass()
x = y
If x Is y Then

‘msgbox (“São iguais”)

end if

No exemplo acima foram criadas duas variáveis que são instâncias (cópias) da classe MyClass ( ), em seguida foi atribuída a variável inicializada y para outra não inicializada x, neste caso é a mesma cópia do objeto. O último comando executa um teste comparando o valor de uma com o valor de outra, em caso afirmativo vai exibir uma mensagem “São Iguais”.

Dim x As New MyClass()
Dim y As New MyClass()
If x Is y Then

‘msgbox (“São iguais”)

end if

No exemplo acima, foram também criadas duas variáveis que são cópias da classe MyClass ( ), observe porém que as cópias são do mesmo objeto, isto é MyClass, mas as instâncias (cópias) são diferentes. A variável X criou uma cópia separada do objeto, pois utilizou o comando New, enquanto que a variável Y criou outra cópia separada do mesmo objeto, pois também utilizou o comando New.

É possível descobrir o tipo do objeto criado utilizando o operador TypeOf...Is. Exemplo :

Dim x As Button
x = New Button()
If TypeOf x Is Control Then
 " Continuação do programa.

No exemplo acima, o operador é chamado para verificar se a variável X é uma instância de uma classe, neste caso o resultado é True.

  1. Operadores de Concatenação

Os operadores de concatenação juntam duas strings em uma única string. Dois são os operadores de concatenação : & , + .

O operador & foi especialmente criado para junções de variáveis do tipo string:

Dim X as string = “Meu fusca “

X = X & “Amarelo” ‘atribui a string “Meu fusca Amarelo”

O operador + além de ser um operador aritmético, também pode ser usado para concatenar strings. O compilador do VB tem comportamentos diferentes quando a opção Option Strict está ligada (on) ou desligada (off).:

  • Strict On – o compilador utiliza tanto & quanto + para concatenar variáveis strings da mesma forma.
  • Strict Off – o compilador utiliza + para fazer conversões implícitas entre diversos tipos, enquanto que & não pode executar essas conversões.

Exemplo :

Dim myNumber As Integer

Dim var1 As String

Dim var2 As Integer

myNumber = 2 + 2 " Retorna 4.

myNumber = 4257.04 + 98112 " Retorna 102369.04.

Option Strict On

" inicializa as variáveis de diferentes tipos.

var1 = "34"

var2 = 6

myNumber = var1 + var2 " Gera um erro de compilação.

Option Strict Off

Var1 = "34"

Var2 = 6

myNumber = var1 + var2

" Retorna o número 40 como resultado da soma após a

‘string Var1 ser convertida para número. O uso de

Option Strict Off não é recomendada.

No último exemplo acima, o operador + faz uma conversão implícita de Var1 para integer, e o resultado final é a soma de duas variáveis do tipo integer.

  1. Operadores Lógicos

Os operadores lógicos comparam duas expressões do tipo verdadeiro ou false e retornam um valor do tipo Boolean, além disso, os operadores lógicos também podem processar comparações em Bitwise que comparam dois valores em formato binário (base 2).

Os operadores lógicos são : And, Or, AndAlso, OrElse, Xor, Not.

Operações com Expressões

Dentre os operadores acima, todos trabalham com dois operadores, mas somente Not trabalha com um operador (unário). Exemplos

Dim x As Boolean

x = Not 23 > 12 " x é False.

x = Not 23 > 67 " x é True.

No exemplo acima, o operador Not executa uma operação de negação, e simplesmente muda a forma de avaliação proposta. Assim X não avalia 23 > 2, portanto é falso, em seguida X não avalia 23 > 67 então é verdadeiro.

Dim x As Boolean

x = 23 > 12 And 12 > 4 " x = True

x = 12 > 23 And 12 > 4 " x = False

Acima, o operador And executa uma operação de junção entre duas expressões, e retorna verdadeiro se todas as expressões forem verdadeiras. Se todas as expressões forem falsas, o resultado é falso. Se uma delas for verdadeira e outra false, ainda assim o resultado é falso.

Dim x As Boolean

x = 23 > 12 Or 4 > 12` " x = True

x = 23 > 45 Or 4 > 12 " x = False

O operador Or acima, executa uma operação de disjunção entre duas expressões, Se ambas as expressões forem verdadeiras o resultado é True. Se ambas as expressões forem false, o resultado é false. Mas se uma das expressões forem verdadeiras, então o resultado é True.

Dim x As Boolean

x = 23 > 45 Xor 12 > 4 " x = True

x = 23 > 12 Xor 12 > 4 " x = False

x = 12 > 23 Xor 4 > 12 " x = False

No exemplo acima, o operador Xor executa uma operação de exclusão entre duas expressões. Se ambas as expressões forem verdadeiras, o resultado é False. Se ambas as expressões são falsas, o resultado ainda é False. Mas se uma das expressões for verdadeira e outra falsa, o resultado final é verdadeiro.

Dim x As Boolean

x = 23 > 12 And msgbox(“Olá”) " exibe a mensagem Olá

x = 12 > 23 And msgbox (“Olá”) " Não exibe a mensagem Olá

No exemplo acima, o operador AndAlso executa uma operação de junção, semelhante ao operador And, a única diferença é que se a primeira expressão for falsa o operador AndAlso não avalia a segunda expressão, e o resultado será false. Ao passo que o operador And, avalia as duas expressões obrigatoriamente e também retorna false.

Dim x As Boolean

x = 23 > 12 OrElse msgbox (“Olá”) " não exibe a mensagem Olá

x = 23 > 45 OrElse Msgbox ( “Olá”) Exibe a mensagem Olá

Acima, o operador OrElse executa uma operação de disjunção entre duas expressões, semelhante ao operador Or, a única diferença é que se a primeira expressão for verdadeira o operador Or não avalia a segunda expressão e o resultado será false. Ao passo que o operador Or, avalia as duas expressões obrigatoriamente e também retorna false.

Portanto os operadores AndAlso e OrElse economizam tempo e recursos de processamento e também são conhecidos como operadores Short-Circuiting.

Operadores Bitwise

As operações Bitwise avaliam valores em formato binário, e comparam os bits em suas posições correspondentes, em seguida retornam o resultado da comparação. Exemplo :

Dim x As Integer

x = 3 And 5 " x = 1

No exemplo acima, não há comparação entre expressões, mas entre números inteiros com o operador And. Portanto o compilador transforma os números em formato binário e executa a comparação em bitwise.

  • Primeiro o valor é convertido para formato binário :

3 em binário é = 011

5 em binário é = 101

  • Em seguida os binários são comparados uma posição por vez. Se ambas as posições forem 1, então 1 será o resultado da comparação dessa posição . Se uma delas for zero, então zero será o resultado da comparação dessa posição :

011 3 em decimal

101 5 em decimal

001 O resultado em formato binário

Convertendo para o formato decimal, 001 é o formato binário do número 1, então x = 1.

Dim x As Integer

x = 3 or 5 " x = 7

No exemplo acima, o compilador transforma os números em binário e executa uma comparação em bitwise com o operador Or a seguir :

011 3 em decimal

101 5 em decimal

111 O resultado em formato binário.

Convertendo para o formato decimal, 111 é o formato binário do número 7, então x = 7

Dim x As Integer

x = 3 Xor 5 " x = 6

No exemplo acima, o compilador transforma os números em binário e executa uma comparação em bitwise com o operador XOr a seguir :

011 3 em decimal

101 5 em decimal

110 O resultado em formato binário.

Convertendo para o formato decimal, 110 é o formato binário do número 6, então x = 6

Dim x As Integer

x = Not 5 " x = -6

No exemplo acima, o compilador transforma os número em binário e executa uma comparação em bitwise com o operador Not, que inverte a ordem dos bits incluindo o sinal, por isso o resultado é -6.

Resumindo : As operações em Bitwise só podem ser efetuadas com tipos de dados Integer. Os outros tipos de dados devem ser convertidos obrigatoriamente para Integer.

  1. Operadores de atribuição

Os operadores de atribuição executam a tarefa de pegar um valor a direita do operador e atribuí-lo a variável a esquerda do operador. Os valores de atribuição podem ser outras variáveis, expressões, funções, entretanto todas devem obedecer as formas de conversão já estudadas.

Operador =

Usado para atribuir um valor a uma variável ou propriedade. Exemplo :

myInt = 42

Operador ^=

Usado para elevar o valor da variável à potência definida a direita do operador, e atribui o resultado a variável. Exemplo :

Dim var1 As Integer = 10

Dim var2 As Integer = 3

var1 ^= var2 " O valor de var1 é agora 1000.

Observe que o operador substitui a expressão var1 = 10 ^ 3. Essa é a forma mais eficiente para efetuar cálculos.

Operador *=

Usado para multiplicar o valor da variável pelo valor definido a direita do operador, e atribui o resultado a variável. Exemplo :

Dim var1 As Integer = 10

Dim var2 As Integer = 3

var1 *= var2 " O valor de var1 é agora 30.

Observe que o operador substitui a expressão var1 = 10 * 3. Essa é a forma mais eficiente para efetuar cálculos.

Operador /=

Divide o valor da variável pelo valor definido a direita do operador, e atribui o resultado a variável. Exemplo :

Dim var1 As Integer = 12

Dim var2 As Integer = 3

var1 /= var2 " O valor de var1 é 4.

O operador substitui a expressão var1 = 12 / 3. É a forma mais eficiente para efetuar esse cálculo.

Operador \=

Usado para dividir os inteiros da variável pelo valor definido a direita do operador, e atribui o resultado a variável. Exemplo :

Dim var1 As Integer = 10

Dim var2 As Integer = 3

var1 \= var2 " O valor agora de var1 é 3.

O operador substitui a expressão var1 = 10 \ 3. É a forma mais eficiente para efetuar esse cálculo.

Operador +=

Adiciona o valor definido a direita do operador a variável. Além disso concatena a string definida a direita do operador a variável string. Todos os resultados obtidos são atribuídos a variável. Exemplo :

Dim var1 As Integer = 10

Dim var2 As Integer = 3

var1 += var2 " O valor agora da var1 é 13.

" Este exemplo usa variáveis string.

Dim var1 As String = "10"

Dim var2 As String = "3"

var1 += var2 " O string agora da variável var1 é "103".

O operador substitui as expressões var1 = 10 + 3, e var1 = “10” & “3”. São as formas mais eficientes para executar essas operações. As conversões devem obedecer o comportamento de acordo com a opção Option Strict.

Operador -=

Usado para subtrair o valor definido a direita do operador da variável, e atribui o resultado a variável. Exemplo :

Dim var1 As Integer = 10

Dim var2 As Integer = 3

var1 -= var2 " O valor de var1 é agora 7.

O operador acima substitui a expressão var1 = 10 – 3. É a forma mais eficiente para executar essa operação.

Operador &=

Usado para concatenar a string definida a direita do operador com a string da variável, e atribui o resultado a variável. Exemplo :

Dim var1 As String = "Hello "

Dim var2 As String = "World!"

var1 &= var2 " A string de var1 é agora "Hello World!"

O operador substitui a expressão var1 = “Hello ” & “World”. É a forma mais eficiente para concatenar essas strings.

Todos os operadores descritos acima aceitam expressões, funções, constantes após os operadores. Como por exemplo :

‘esse exemplo utiliza operador com uma expressão

Dim Var1 as integer = 2

Var1 += (1+2) ^ 2 ‘ o valor retornado é 11

  1. Operadores Gerais

Os operadores gerais são todos os operadores que não se enquadram nas divisões acima. São dois os operadores gerais.

Operador AddressOf

Usado para criar uma referência que aponta para um procedimento ou função definidos após esse operador, isto significa que o operador vai sempre executar o nome da função a direita do operador.

Esse tipo de operador é usado com o recurso Delegate do VB .Net, que será estudado mais tarde, para manter um ponteiro para uma função ou procedimento mesmo que esta já tenha sido descartada na memória.

Em versões anteriores do VB, esse operador era usado para passar o endereço de memória de um procedimento para uma Função API do Windows.

De forma clara, o operador AddressOf muda o “curso” de um procedimento qualquer para o procedimento que foi informado a direita do operador. Exemplo :

Public Sub ButtonClickHandler(ByVal sender As Object, e As System.EventArgs)
     Msgbox (“Outro evento para o botão.”) ‘Exibe a mensagem ‘Outro evento para o botão’
End Sub

    
Public Sub New()
 AddHandler Button1.Click, AddressOf ButtonClickHandler
End Sub

No exemplo acima, foi criado um procedimento ButtonClickHandler que exibe a mensagem “Outro evento para o botão”. Em seguida, no evento New de uma janela do VB, foi criado um método para mudar o curso do evento Clique de um botão para o novo procedimento ButtonClickHandler utilizando o operador AddressOf.

Observe que o não existe código algum no evento Click do botão de comando.

Operador GetType

Usado para informar o tipo de objeto que uma variável pertence, além disso pode retornar propriedades, métodos e eventos do respectivo tipo. Exemplo :

Dim t As Type() = 
    {GetType(Integer),GetType(System.Int32),GetType(String),GetType(Double())}
Dim i As Integer
For i = 0 To t.Length - 1
  Console.WriteLine(t(i).Name)
Next i

O resultado do teste é :

Int32
Int32
String
Double()

O exemplo acima, cria uma variável como uma matriz de tipos Type( ) e inicializa seus valores com o operador GetType. Em seguida, escreve os resultados na janela Output do Visual Studio.

  1. Precedência de operadores

O VB dentro de uma expressão, executa os cálculos de operadores nessa ordem :

Operadores Aritméticos e Concatenação

  1. Exponenciação (^)
  2. Negação (–)
  3. Multiplicação e Divisão (*, /)
  4. Divisão Inteira (\)
  5. Módulo aritmético (Mod)
  6. Adição e Subtração (+, –), Concatenação de strings (+)
  7. Concatenação de strings (&)

Operadores de Comparação

  1. Igualdade (=)
  2. Diferenciação (<>)
  3. Menor que, Maior que (<,>)
  4. Maior ou igual à (>=)
  5. Menor ou igual à (<=)
  6. Like
  7. Is
  8. TypeOf...Is

Operadores Lógicos e Bitwise

  1. Negação (Not)
  2. Junção (And, AndAlso)
  3. Disjunção (Or, OrElse, Xor)

É possível alterar a ordem de precedência dentro de uma expressão, utilizando parênteses entre os membros da expressão. Exemplo :

x = ((4 +2) ^2) – (5 * 3) ‘x retorna 21

x = 4 + (2 ^ 2) - (5 * 3) ‘x retorna -7
Paulo Cesar Macedo

Paulo Cesar Macedo