Share via


Istruzioni in Visual Basic

Un'istruzione in Visual Basic è un'istruzione completa. Può contenere parole chiave, operatori, variabili, costanti ed espressioni. Ogni istruzione appartiene a una delle categorie seguenti:

  • Istruzioni di dichiarazione, che denominano una variabile, una costante o una routine e possono anche specificare un tipo di dati.

  • Istruzioni eseguibili, che avviano azioni. Queste istruzioni possono chiamare un metodo o una funzione e possono eseguire cicli o creare rami attraverso blocchi di codice. Le istruzioni eseguibili includono istruzioni di assegnazione, che assegnano un valore o un'espressione a una variabile o a una costante.

Questo argomento descrive ogni categoria. In questo argomento viene inoltre descritto come combinare più istruzioni su una singola riga e come continuare un'istruzione su più righe.

Istruzioni di dichiarazione

Si usano le istruzioni di dichiarazione per denominare e definire procedure, variabili, proprietà, matrici e costanti. Quando si dichiara un elemento di programmazione, è anche possibile definirne il tipo di dati, il livello di accesso e l'ambito. Per altre informazioni, vedere Caratteristiche degli elementi dichiarati.

L'esempio seguente contiene tre dichiarazioni.

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

La prima dichiarazione è l'istruzione Sub. Insieme all'istruzione End Sub corrispondente, dichiara una routine denominata applyFormat. Specifica anche che applyFormat è Public, a indicare che qualsiasi parte di codice che può farvi riferimento può chiamarla.

La seconda dichiarazione è l'istruzione Const, che dichiara la costante limit, specificando il tipo di dati Integer e il valore 33.

La terza dichiarazione è l'istruzione Dim, che dichiara la variabile thisWidget. Il tipo di dati è un oggetto specifico, ovvero un oggetto creato dalla classe Widget. È possibile dichiarare una variabile come qualsiasi tipo di dati elementare o di qualsiasi tipo di oggetto esposto nell'applicazione in uso.

Valori iniziali

Quando viene eseguito il codice contenente un'istruzione di dichiarazione, Visual Basic riserva la memoria necessaria per l'elemento dichiarato. Se l'elemento contiene un valore, Visual Basic lo inizializza sul valore predefinito per il relativo tipo di dati. Per altre informazioni, vedere "Comportamento" in Istruzione Dim.

È possibile assegnare un valore iniziale a una variabile come parte della relativa dichiarazione, come illustrato nell'esempio seguente.

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

Se una variabile è una variabile oggetto, è possibile creare in modo esplicito un'istanza della relativa classe quando la si dichiara usando la parola chiave New Operator, come illustrato nell'esempio seguente.

Dim f As New FileInfo("filename")

Si noti che il valore iniziale specificato in un'istruzione di dichiarazione non viene assegnato a una variabile finché l'esecuzione non raggiunge l'istruzione di dichiarazione. Fino a quel momento, la variabile contiene il valore predefinito per il relativo tipo di dati.

Istruzioni eseguibili

Un'istruzione eseguibile esegue un'azione. Può chiamare una routine, creare un ramo in un'altra posizione nel codice, scorrere ciclicamente più istruzioni o valutare un'espressione. Un'istruzione di assegnazione è un caso speciale di istruzione eseguibile.

Nell'esempio seguente viene utilizzata una struttura di controllo If...Then...Else per eseguire blocchi di codice diversi in base al valore di una variabile. All'interno di ogni blocco di codice, un ciclo For...Next viene eseguito per un numero specificato di volte.

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

L'istruzione If nell'esempio precedente controlla il valore del parametro clockwise. Se il valore è True, chiama il metodo spinClockwise di aWidget. Se il valore è False, chiama il metodo spinCounterClockwise di aWidget. La struttura di controllo If...Then...Else termina con End If.

Il ciclo For...Next all'interno di ogni blocco chiama il metodo appropriato per un numero di volte uguale al valore del parametro revolutions.

Istruzioni di assegnazione

Le istruzioni di assegnazione eseguono operazioni di assegnazione, che prevedono l'acquisizione del valore a destra dell'operatore di assegnazione (=) e l'archiviazione nell'elemento a sinistra, come nell'esempio seguente.

v = 42

Nell'esempio precedente l'istruzione di assegnazione archivia il valore letterale 42 nella variabile v.

Elementi di programmazione idonei

L'elemento di programmazione a sinistra dell'operatore di assegnazione deve essere in grado di accettare e archiviare un valore. Ciò significa che deve essere una variabile o una proprietà che non ReadOnly o che deve essere un elemento matrice. Nel contesto di un'istruzione di assegnazione, tale elemento viene talvolta chiamato lvalue, ovvero left value, a indicare il "valore sinistro".

Il valore a destra dell'operatore di assegnazione viene generato da un'espressione, che può essere costituita da qualsiasi combinazione di valori letterali, costanti, variabili, proprietà, elementi matrice, altre espressioni o chiamate di funzione. Ciò è illustrato nell'esempio seguente.

x = y + z + FindResult(3)

L'esempio precedente aggiunge il valore contenuto nella variabile y al valore contenuto nella variabile z e quindi aggiunge il valore restituito dalla chiamata alla funzione findResult. Il valore totale di questa espressione viene quindi archiviato nella variabile x.

Tipi di dati nelle istruzioni di assegnazione

Oltre ai valori numerici, l'operatore di assegnazione può anche assegnare valori String, come illustrato nell'esempio seguente.

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

È anche possibile assegnare valori Boolean, usando un valore letterale Boolean o un'espressione Boolean, come illustrato nell'esempio seguente.

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.

Analogamente, è possibile assegnare valori appropriati agli elementi di programmazione del tipo di dati Char, Date o Object. È anche possibile assegnare un'istanza dell'oggetto a un elemento dichiarato come della classe da cui viene creata l'istanza.

Istruzioni di assegnazione composte

Le istruzioni di assegnazione composte eseguono prima di tutto un'operazione su un'espressione prima di assegnarla a un elemento di programmazione. Nell'esempio seguente viene illustrato uno di questi operatori, +=, che incrementa il valore della variabile a sinistra dell'operatore in base al valore dell'espressione a destra.

n += 1

L'esempio precedente aggiunge 1 al valore di ne quindi archivia il nuovo valore in n. Si tratta di un equivalente abbreviato dell'istruzione seguente:

n = n + 1

È possibile eseguire un'ampia gamma di operazioni di assegnazione composta usando gli operatori di questo tipo. Per un elenco di questi operatori e altre informazioni su di essi, vedere Operatori di assegnazione.

L'operatore di assegnazione di concatenazione (&=) è utile per aggiungere una stringa alla fine di stringhe già esistenti, come illustrato nell'esempio seguente.

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

Conversioni dei tipi nelle istruzioni di assegnazione

Il valore assegnato a una variabile, una proprietà o un elemento matrice deve essere di un tipo di dati appropriato per tale elemento di destinazione. In generale, è consigliabile provare a generare un valore dello stesso tipo di dati dell'elemento di destinazione. Tuttavia, alcuni tipi possono essere convertiti in altri tipi durante l'assegnazione.

Per informazioni sulla conversione tra tipi di dati, vedere Conversioni dei tipi in Visual Basic. In breve, Visual Basic converte automaticamente un valore di un tipo specifico in qualsiasi altro tipo supportato. Una conversione che supporta un maggior numero di dati è una conversione che ha sempre esito positivo in fase di esecuzione e non perde dati. Ad esempio, Visual Basic converte un valore Integer in Double quando appropriato, perché Integer supporta il tipo di dati Double. Per altre informazioni, vedere Widening and Narrowing Conversions.

Le conversioni che supportano un minor numero di dati comportano un rischio di errore in fase di esecuzione o di perdita di dati. È possibile eseguire una conversione che supporta un minor numero di dati in modo esplicito usando una funzione di conversione dei tipi oppure indirizzare il compilatore a eseguire tutte le conversioni in modo implicito impostando Option Strict Off. Per altre informazioni, vedere Conversioni implicite ed esplicite.

Inserimento di più istruzioni su una riga

È possibile inserire più istruzioni su una singola riga separate dal carattere due punti (:). Ciò è illustrato nell'esempio seguente.

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

Anche se in alcuni casi può essere utile, questa forma di sintassi rende difficile leggere e gestire il codice. Pertanto, è consigliabile mantenere un'istruzione su una riga.

Continuazione di un'istruzione su più righe

In genere un'istruzione rientra in una riga, ma quando è troppo lunga, è possibile continuarla sulla riga successiva usando una sequenza di continuazione di riga, costituita da uno spazio seguito da un carattere di sottolineatura (_) seguito da un ritorno a capo. Nell'esempio seguente l'istruzione MsgBox eseguibile viene continuata su due righe.

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

Continuazione di riga implicita

In molti casi, è possibile continuare un'istruzione nella riga consecutiva successiva senza usare il carattere di sottolineatura (_). Gli elementi della sintassi seguenti continuano in modo implicito l'istruzione nella riga di codice successiva.

  • Dopo una virgola (,). Ad esempio:

    Public Function GetUsername(ByVal username As String,
                                ByVal delimiter As Char,
                                ByVal position As Integer) As String
    
        Return username.Split(delimiter)(position)
    End Function
    
  • Dopo una parentesi aperta (() o prima di una parentesi chiusa ()). Ad esempio:

    Dim username = GetUsername(
        Security.Principal.WindowsIdentity.GetCurrent().Name,
        CChar("\"),
        1
      )
    
  • Dopo una parentesi graffa aperta ({) o prima di una parentesi graffa chiusa (}). Ad esempio:

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

    Per altre informazioni, vedere Inizializzatori di oggetti: tipi denominati e anonimi o Inizializzatori di insieme.

  • Dopo un'espressione incorporata aperta (<%=) o prima della chiusura di un'espressione incorporata (%>) all'interno di un valore letterale XML. Ad esempio:

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

    Per altre informazioni, vedere Espressioni incorporate in XML.

  • Dopo l'operatore di concatenazione (&). Ad esempio:

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

    Per altre informazioni, vedere Operatori elencati per funzionalità.

  • Dopo gli operatori di assegnazione (=, &=, :=, +=, -=, *=, /=, \=, ^=, <<=, >>=). Ad esempio:

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

    Per altre informazioni, vedere Operatori elencati per funzionalità.

  • Dopo gli operatori binari (+, -, /, *, Mod, <>, <, >, <=, >=, ^, >>, <<, And, AndAlso, Or, OrElse, Like, Xor) all'interno di un'espressione. Ad esempio:

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

    Per altre informazioni, vedere Operatori elencati per funzionalità.

  • Dopo gli operatori Is e IsNot. Ad esempio:

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

    Per altre informazioni, vedere Operatori elencati per funzionalità.

  • Dopo un carattere qualificatore membro (.) e prima del nome del membro. Ad esempio:

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

    Tuttavia, è necessario includere un carattere di continuazione riga (_) dopo un carattere qualificatore membro quando si usa l'istruzione With o si specificano valori nell'elenco di inizializzazione per un tipo. Valutare un'interruzione di riga dopo l'operatore di assegnazione ( ad esempio =) quando si usano istruzioni With o elenchi di inizializzazione di oggetti. Ad esempio:

    ' 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
    

    Per altre informazioni, vedere Istruzione With...End With o Inizializzatori di oggetti: tipi denominati e anonimi.

  • Dopo un qualificatore di proprietà dell'asse XML (. o .@ o ...). È tuttavia necessario includere un carattere di continuazione riga (_) quando si specifica un qualificatore membro e si usa la parola chiave With. Ad esempio:

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

    Per altre informazioni, vedere Proprietà dell'asse XML.

  • Dopo un segno minore di (<) o prima di un segno maggiore di (>) quando si specifica un attributo. Inoltre, dopo un segno maggiore di (>) quando si specifica un attributo. È tuttavia necessario includere un carattere di continuazione riga (_) quando si specificano attributi a livello di assembly o a livello di modulo. Ad esempio:

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

    Per altre informazioni, vedere Panoramica degli attributi.

  • Prima e dopo gli operatori di query (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). Non è possibile interrompere una riga tra le parole chiave degli operatori di query costituiti da più parole chiave (Order By, Group Join, Take While e Skip While). Ad esempio:

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

    Per altre informazioni, vedere Query.

  • Dopo la parola chiave In in un'istruzione For Each. Ad esempio:

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

    Per altre informazioni, vedere Istruzione For Each...Next.

  • Dopo la parola chiave From in un inizializzatore di insieme. Ad esempio:

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

    Per altre informazioni, vedere Inizializzatori di insieme.

Aggiunta di commenti

Il codice sorgente non è sempre autoesplicativo, anche per il programmatore che lo ha scritto. Di conseguenza, per documentare il codice la maggior parte dei programmatori fa uso abbondante dei commenti incorporati. I commenti nel codice possono spiegare una routine o un'istruzione specifica a coloro che leggono o che useranno il codice in un secondo momento. Visual Basic ignora i commenti durante la compilazione e non influiscono sul codice compilato.

Le righe di commento iniziano con un apostrofo (') o REM seguite da uno spazio. Possono essere aggiunti in qualsiasi punto del codice, ma non all'interno di una stringa. Per aggiungere un commento a un'istruzione, inserire un apostrofo o REM dopo l'istruzione, seguito dal commento. È anche possibile inserire i commenti in una riga separata. L'esempio seguente illustra queste possibilità.

' 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.

Controllo degli errori di compilazione

Se, dopo aver digitato una riga di codice, la riga viene visualizzata con una sottolineatura blu ondulata (potrebbe essere visualizzato anche un messaggio di errore), significa che l'istruzione contiene un errore di sintassi. È necessario comprendere qual è il problema nell'istruzione (cercando nell'elenco attività o passando il puntatore del mouse sull'errore per visualizzare il messaggio di errore) e correggerlo. La compilazione del programma avrà esito negativo fino a quando non vengono corretti tutti gli errori di sintassi nel codice.

Termine Definizione
Operatori di assegnazione Fornisce collegamenti alle pagine di riferimento del linguaggio che descrivono gli operatori di assegnazione, ad esempio =, *= e &=.
Operatori ed espressioni Illustra come combinare gli elementi con gli operatori per generare nuovi valori.
Procedura: Interrompere e combinare istruzioni nel codice Viene illustrato come suddividere una singola istruzione in più righe e come inserire più istruzioni nella stessa riga.
Procedura: Etichettare le istruzioni Illustra come etichettare una riga di codice.