Instruções no Visual Basic

Uma instrução no Visual Basic é completa. Ela pode conter palavras-chave, operadores, variáveis, constantes e expressões. Cada instrução pertence a uma das seguintes categorias:

  • Instruções de declaração, que nomeia uma variável, constante ou procedimento, e também podem especificar um tipo de dados.

  • Instruções executáveis, que iniciam ações. Essas instruções podem chamar um método ou função e podem fazer loop ou ramificar por meio de blocos de código. As instruções executáveis incluem Instruções de Atribuição, que atribuem um valor ou uma expressão a uma variável ou constante.

Este tópico descreve cada categoria. Além disso, este tópico descreve como combinar várias instruções em uma única linha e como continuar uma instrução em várias linhas.

Instruções de declaração

Você usa instruções de declaração para nomear e definir procedimentos, variáveis, propriedades, matrizes e constantes. Ao declarar um elemento de programação, você também pode definir seu tipo de dados, nível de acesso e escopo. Para obter mais informações, consulte Características do Elemento Declarado.

O exemplo a seguir contém três classes, , e .

Public Sub ApplyFormat()
    Const limit As Integer = 33
    Dim thisWidget As New widget
    ' Insert code to implement the procedure.
End Sub

A primeira declaração é a instrução Sub. Juntamente com a instrução correspondente End Sub, ele declara um procedimento chamado applyFormat. Ele também especifica que applyFormat é Public, o que significa que qualquer código que possa se referir a ele pode chamá-lo.

A segunda declaração é a instrução Const, que declara a constante limit, especificando o tipo de dados Integer e um valor de 33.

A terceira declaração é a Dim instrução, que declara a variável thisWidget. O tipo de dados é um objeto específico, ou seja, um objeto criado com base na classe Widget. Você pode declarar uma variável como de qualquer tipo de dados elementar ou de qualquer tipo de objeto exposto no aplicativo que você está usando.

Valores iniciais

Quando o código que contém uma instrução de declaração é executado, o Visual Basic reserva a memória necessária para o elemento declarado. Se o elemento tiver um valor, o Visual Basic o inicializará para o valor padrão de seu tipo de dados. Para obter mais informações, consulte "Comportamento" na Instrução Dim.

Você pode atribuir um valor inicial a uma variável como parte de sua declaração, como ilustra o exemplo a seguir.

Dim m As Integer = 45
' The preceding declaration creates m and assigns the value 45 to it.

Se uma variável for uma variável de objeto, você poderá criar explicitamente uma instância de sua classe ao declará-la usando a palavra-chave Novo Operador, como ilustra o exemplo a seguir.

Dim f As New FileInfo("filename")

Observe que o valor inicial especificado em uma instrução de declaração não é atribuído a uma variável até que a execução atinja sua instrução de declaração. Até esse momento, a variável contém o valor padrão para seu tipo de dados.

Instruções executáveis

Uma instrução executável executa uma ação. Ele pode chamar um procedimento, ramificar para outro lugar no código, fazer loop por várias instruções ou avaliar uma expressão. Uma instrução de atribuição é um caso especial de uma instrução executável.

O exemplo a seguir usa uma estrutura If...Then...Else de controle para executar diferentes blocos de código com base no valor de uma variável. Em cada bloco de código, um loop For...Next executa um número especificado de vezes.

Public Sub StartWidget(ByVal aWidget As widget,
    ByVal clockwise As Boolean, ByVal revolutions As Integer)
    Dim counter As Integer
    If clockwise = True Then
        For counter = 1 To revolutions
            aWidget.SpinClockwise()
        Next counter
    Else
        For counter = 1 To revolutions
            aWidget.SpinCounterClockwise()
        Next counter
    End If
End Sub

A instrução If no exemplo anterior verifica o valor do parâmetro clockwise. Se o valor for True, ele chamará o método spinClockwise de aWidget. Se o valor for False, ele chamará o método spinCounterClockwise de aWidget. A estrutura If...Then...Else de controle termina com End If.

O loop For...Next em cada bloco chama o método apropriado várias vezes igual ao valor do revolutions parâmetro.

Instruções de atribuição

As instruções de atribuição executam operações de atribuição, que consistem em pegar o valor no lado direito do operador de atribuição (=) e armazená-lo no elemento à esquerda, como no exemplo a seguir.

v = 42

No exemplo anterior, a instrução de atribuição armazena o valor literal 42 na variável v.

Elementos de programação qualificados

O elemento de programação no lado esquerdo do operador de atribuição deve ser capaz de aceitar e armazenar um valor. Isso significa que ele deve ser uma variável ou propriedade que não seja ReadOnly ou deve ser um elemento de matriz. No contexto de uma instrução de atribuição, esse elemento às vezes é chamado de lvalue, para "valor esquerdo".

O valor no lado direito do operador de atribuição é gerado por uma expressão, que pode consistir em qualquer combinação de literais, constantes, variáveis, propriedades, elementos de matriz, outras expressões ou chamadas de função. O exemplo a seguir ilustra essa situação.

x = y + z + FindResult(3)

O exemplo anterior adiciona o valor mantido na variável y ao valor mantido na variável ze, em seguida, adiciona o valor retornado pela chamada à função findResult. O valor total dessa expressão é armazenado em variável x.

Tipos de dados em instruções de atribuição

Além dos valores numéricos, o operador de atribuição também pode atribuir valores String, como ilustra o exemplo a seguir.

Dim a, b As String
a = "String variable assignment"
b = "Con" & "cat" & "enation"
' The preceding statement assigns the value "Concatenation" to b.

Você também pode atribuir valores Boolean, usando um literal Boolean ou uma expressão Boolean, como ilustra o exemplo a seguir.

Dim r, s, t As Boolean
r = True
s = 45 > 1003
t = 45 > 1003 Or 45 > 17
' The preceding statements assign False to s and True to t.

Da mesma forma, você pode atribuir valores apropriados a elementos de programação do tipo de dados Char, Date ou Object. Você também pode atribuir uma instância de objeto a um elemento declarado como sendo da classe da qual essa instância é criada.

Instruções de atribuição composta

As instruções de atribuição composta primeiro executam uma operação em uma expressão antes de atribuí-la a um elemento de programação. O exemplo a seguir ilustra um desses operadores, +=, que incrementa o valor da variável no lado esquerdo do operador pelo valor da expressão à direita.

n += 1

O exemplo anterior adiciona 1 ao valor de n, e armazena esse novo valor em n. É um equivalente abreviado da seguinte instrução:

n = n + 1

Uma variedade de operações de atribuição composta pode ser executada usando operadores desse tipo. Para obter uma lista desses operadores e mais informações sobre eles, consulte Operadores de Atribuição.

O operador de atribuição de concatenação (&=) é útil para adicionar uma cadeia de caracteres ao final de cadeias de caracteres já existentes, como ilustra o exemplo a seguir.

Dim q As String = "Sample "
q &= "String"
' q now contains "Sample String".

Conversões de tipo em instruções de atribuição

O valor atribuído a uma variável, propriedade ou elemento de matriz deve ser de um tipo de dados apropriado para esse elemento de destino. Em geral, você deve tentar gerar um valor do mesmo tipo de dados que o do elemento de destino. No entanto, alguns tipos podem ser convertidos em outros tipos durante a atribuição.

Para obter informações sobre como converter entre tipos de dados, consulte Conversões de tipo no Visual Basic. Resumidamente, o Visual Basic converte automaticamente um valor de um determinado tipo em qualquer outro tipo no qual ele é expandido. Uma conversão de expansão é aquela em que sempre é bem-sucedida no tempo de execução e não perde nenhum dado. Por exemplo, o Visual Basic converte um valor Integer para Double, quando apropriado, porque Integer é expandido para Double. Para obter mais informações, consulte Ampliando e restringindo conversões.

As conversões de restrição (aquelas que não estão expandido) correm o risco de ter falhas em tempo de execução ou perda de dados. Você pode executar uma conversão de estreitamento explicitamente usando uma função de conversão de tipo ou direcionar o compilador para executar todas as conversões implicitamente definindo Option Strict Off. Para obter mais informações, consulte Conversões implícitas e explícitas.

Colocando várias instruções em uma linha

Você pode ter várias instruções em uma única linha separadas pelo caractere dois-pontos (:). O exemplo a seguir ilustra essa situação.

Dim sampleString As String = "Hello World" : MsgBox(sampleString)

Embora ocasionalmente conveniente, essa forma de sintaxe torna seu código difícil de ler e manter. Portanto, é recomendável manter uma instrução em uma linha.

Continuando uma instrução em várias linhas

Uma instrução geralmente se encaixa em uma linha, mas quando é muito longa, você pode continuar na próxima linha usando uma sequência de continuação de linha, que consiste em um espaço seguido por um caractere sublinhado (_) seguido por um retorno de carro. No exemplo a seguir, a instrução MsgBox executável é continuada em duas linhas.

Public Sub DemoBox()
    Dim nameVar As String
    nameVar = "John"
    MsgBox("Hello " & nameVar _
        & ". How are you?")
End Sub

Continuação de linha implícita

Em muitos casos, você pode continuar uma instrução na próxima linha consecutiva sem usar o caractere de sublinhado (_). Os elementos de sintaxe a seguir continuam implicitamente a instrução na próxima linha de código.

  • Após uma vírgula (,). Por exemplo:

    Public Function GetUsername(ByVal username As String,
                                ByVal delimiter As Char,
                                ByVal position As Integer) As String
    
        Return username.Split(delimiter)(position)
    End Function
    
  • Após um parêntese aberto (() ou antes de um parêntese de fechamento ()). Por exemplo:

    Dim username = GetUsername(
        Security.Principal.WindowsIdentity.GetCurrent().Name,
        CChar("\"),
        1
      )
    
  • Depois de uma chave aberta ({) ou antes de uma chave} de fechamento (). Por exemplo:

    Dim customer = New Customer With {
      .Name = "Terry Adams",
      .Company = "Adventure Works",
      .Email = "terry@www.adventure-works.com"
    }
    

    Para obter mais informações, consulte Inicializadores de Objeto: Tipos Nomeados e Anônimos ou Inicializadores de Coleção.

  • Após uma expressão inserida aberta (<%=) ou antes do fechamento de uma expressão inserida (%>) dentro de um literal XML. Por exemplo:

    Dim customerXml = <Customer>
                          <Name>
                              <%=
                                  customer.Name
                              %>
                          </Name>
                          <Email>
                              <%=
                                  customer.Email
                              %>
                          </Email>
                      </Customer>
    

    Para obter mais informações, consulte Expressões Inseridas em XML.

  • Após o operador de concatenação (&). Por exemplo:

    cmd.CommandText = 
        "SELECT * FROM Titles JOIN Publishers " &
        "ON Publishers.PubId = Titles.PubID " &
        "WHERE Publishers.State = 'CA'"
    

    Para obter mais informações, consulte Operadores Listados pela Funcionalidade.

  • Após operadores de atribuição (=, &=, :=, +=, -=, *=, /=, \=, ^=, <<=, >>=). Por exemplo:

    Dim fileStream =
      My.Computer.FileSystem.
        OpenTextFileReader(filePath)
    

    Para obter mais informações, consulte Operadores Listados pela Funcionalidade.

  • Após operadores binários (+, -, /, *, Mod, <>, <, >, <=, >=, ^, >>, <<, And, AndAlso, Or, OrElse, Like, Xor) dentro de uma expressão. Por exemplo:

    Dim memoryInUse =
      My.Computer.Info.TotalPhysicalMemory +
      My.Computer.Info.TotalVirtualMemory -
      My.Computer.Info.AvailablePhysicalMemory -
      My.Computer.Info.AvailableVirtualMemory
    

    Para obter mais informações, consulte Operadores Listados pela Funcionalidade.

  • Depois dos operadores Is e IsNot. Por exemplo:

    If TypeOf inStream Is 
      IO.FileStream AndAlso
      inStream IsNot
      Nothing Then
    
        ReadFile(inStream)
    
    End If
    

    Para obter mais informações, consulte Operadores Listados pela Funcionalidade.

  • Após um caractere qualificador de membro (.) e antes do nome do membro. Por exemplo:

    Dim fileStream =
      My.Computer.FileSystem.
        OpenTextFileReader(filePath)
    

    No entanto, você deve incluir um caractere de continuação de linha (_) seguindo um caractere de qualificador de membro quando estiver usando a instrução With ou fornecendo valores na lista de inicialização para um tipo. Considere quebrar a linha após o operador de atribuição (por exemplo, =) quando você estiver usando instruções With ou listas de inicialização de objeto. Por exemplo:

    ' Not allowed:
    ' Dim aType = New With { .
    '    PropertyName = "Value"
    
    ' Allowed:
    Dim aType = New With {.PropertyName =
        "Value"}
    
    
    
    Dim log As New EventLog()
    
    ' Not allowed:
    ' With log
    '    .
    '      Source = "Application"
    ' End With
    
    ' Allowed:
    With log
        .Source =
          "Application"
    End With
    

    Para obter mais informações, consulte Instrução Com...Terminar Com ou Inicializadores de Objeto: Tipos Nomeados e Anônimos.

  • Após um qualificador de propriedade do eixo XML (., .@ ou ...). No entanto, você deve incluir um caractere de continuação de linha (_) ao especificar um qualificador de membro quando estiver usando a palavra-chave With. Por exemplo:

    Dim customerName = customerXml.
      <Name>.Value
    
    Dim customerEmail = customerXml...
      <Email>.Value
    

    Para obter mais informações, consulte Propriedade de Eixo XML.

  • Depois de um sinal menor que (<) ou antes de um sinal maior que (>) quando você especifica um atributo. Também após um sinal maior que (>) quando você especifica um atributo. No entanto, você deve incluir um caractere de continuação de linha (_) ao especificar atributos de nível de assembly ou módulo. Por exemplo:

    <
    Serializable()
    >
    Public Class Customer
        Public Property Name As String
        Public Property Company As String
        Public Property Email As String
    End Class
    

    Para saber mais, confira Visão geral de Atributos.

  • Operadores de consulta antes e depois (Aggregate, Distinct, From, Group By, Group Join, Join, Let, Order By, Select, Skip, Skip While, Take, Take While, Where, In, Into, On, Ascending e Descending). Não é possível quebrar uma linha entre as palavras-chave dos operadores de consulta que são compostos por várias palavras-chave (Order By, Group Join, Take While e Skip While). Por exemplo:

    Dim vsProcesses = From proc In
                        Process.GetProcesses
                      Where proc.MainWindowTitle.Contains("Visual Studio")
                      Select proc.ProcessName, proc.Id,
                             proc.MainWindowTitle
    

    Para obter mais informações, confira Consultas.

  • Após a palavra-chave In em uma instrução For Each. Por exemplo:

    For Each p In
      vsProcesses
    
        Console.WriteLine("{0}" & vbTab & "{1}" & vbTab & "{2}",
          p.ProcessName,
          p.Id,
          p.MainWindowTitle)
    Next
    

    Para obter mais informações, consulte Para cada... Próxima instrução.

  • Após a palavra-chave From em um inicializador de coleção. Por exemplo:

    Dim days = New List(Of String) From
      {
       "Mo", "Tu", "We", "Th", "F", "Sa", "Su"
      }
    

    Para obter mais informações, consulte Inicializadores de coleção.

Como adicionar comentários

O código-fonte nem sempre é autoexplicativo, mesmo para o programador que o escreveu. Para ajudar a documentar seu código, portanto, a maioria dos programadores faz uso liberal de comentários inseridos. Os comentários no código podem explicar um procedimento ou uma instrução específica para qualquer pessoa que esteja lendo ou trabalhando com ele mais tarde. O Visual Basic ignora os comentários durante a compilação e eles não afetam o código compilado.

As linhas de comentário começam com um apóstrofo (') ou REM seguido por um espaço. Elas podem ser adicionadas em qualquer lugar no código, exceto dentro de uma cadeia de caracteres. Para acrescentar um comentário a uma instrução, insira um apóstrofo ou REM após a instrução, seguido do comentário. Os comentários também podem ir em sua própria linha separada. O exemplo a seguir demonstra essas possibilidades.

' This is a comment on a separate code line.
REM This is another comment on a separate code line.
x += a(i) * b(i) ' Add this amount to total.
MsgBox(statusMessage) REM Inform operator of status.

Verificando erros de compilação

Se, depois de digitar uma linha de código, a linha for exibida com um sublinhado azul ondulado (uma mensagem de erro também poderá aparecer), haverá um erro de sintaxe na instrução. Você deve descobrir o que há de errado com a instrução (examinando na lista de tarefas ou passando o mouse sobre o erro com o ponteiro do mouse e lendo a mensagem de erro) e corrigi-la. Até que você tenha corrigido todos os erros de sintaxe em seu código, o programa não será compilado corretamente.

Termo Definição
Operadores de Atribuição Fornece links para páginas de referência de idioma que abrangem operadores de atribuição, como =, *=e &=.
Operadores e Expressões Mostra como combinar elementos com operadores para gerar novos valores.
Como: Quebrar e combinar instruções no código Mostra como dividir uma única instrução em várias linhas e como colocar várias instruções na mesma linha.
Como: Rotular instruções Mostra como rotular uma linha de código.