Instrucciones en Visual Basic

Una instrucción de Visual Basic es una instrucción completa. Puede contener palabras clave, operadores, variables, constantes y expresiones. Cada instrucción pertenece a una de las siguientes categorías:

  • Instrucciones de declaración, que asignan un nombre a una variable, una constante o un procedimiento, y también pueden especificar un tipo de datos.

  • Instrucciones ejecutables, que inician acciones. Estas instrucciones pueden llamar a un método o función, y pueden recorrer en bucle o ramificarse a través de bloques de código. Las instrucciones ejecutables incluyen instrucciones de asignación, que asignan un valor o expresión a una variable o constante.

En este tema se describe cada categoría. Además, en este tema se describe cómo combinar varias instrucciones en una sola línea y cómo continuar una instrucción en varias líneas.

Instrucciones de declaración

Las instrucciones de declaración se usan para nombrar y definir procedimientos, variables, propiedades, matrices y constantes. Al declarar un elemento de programación, también puede definir su tipo de datos, nivel de acceso y ámbito. Para más información, consulte Características de los elementos declarados.

El ejemplo siguiente contiene tres declaraciones.

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

La primera declaración es la instrucción Sub. Junto con su instrucción End Sub correspondiente, declara un procedimiento llamado applyFormat. También especifica que applyFormat es Public, lo que significa que cualquier código que pueda hacer referencia a él puede llamarlo.

La segunda declaración es la instrucción Const, que declara la constante limit, especificando el tipo de datos Integer y un valor de 33.

La tercera declaración es la instrucción Dim, que declara la variable thisWidget. El tipo de datos es un objeto específico, es decir, un objeto creado a partir de la clase Widget. Puede declarar una variable para que sea de cualquier tipo de datos básico o de cualquier tipo de objeto que se exponga en la aplicación que está usando.

Valores iniciales

Cuando se ejecuta el código que contiene una instrucción de declaración, Visual Basic reserva la memoria necesaria para el elemento declarado. Si el elemento contiene un valor, Visual Basic lo inicializa en el valor predeterminado para su tipo de datos. Para más información, consulte "Comportamiento" en Instrucción Dim.

Puede asignar un valor inicial a una variable como parte de su declaración, como se muestra en el ejemplo siguiente.

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

Si una variable es una variable de objeto, puede crear explícitamente una instancia de su clase al declararla mediante la palabra clave New Operator, como se muestra en el ejemplo siguiente.

Dim f As New FileInfo("filename")

Tenga en cuenta que el valor inicial que especifique en una instrucción de declaración no se asigna a una variable hasta que la ejecución alcance su instrucción de declaración. Hasta ese momento, la variable contiene el valor predeterminado para su tipo de datos.

Instrucciones ejecutables

Una instrucción ejecutable realiza una acción. Puede llamar a un procedimiento, ramificarse a otro lugar del código, recorrer varias instrucciones o evaluar una expresión. Una instrucción de asignación es un caso especial de una instrucción ejecutable.

En el ejemplo siguiente se usa una estructura de control If...Then...Else para ejecutar distintos bloques de código en función del valor de una variable. Dentro de cada bloque de código, se ejecuta un bucle For...Next un número especificado de veces.

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

La instrucción If del ejemplo anterior comprueba el valor del parámetro clockwise. Si el valor es True, llama al método spinClockwise de aWidget. Si el valor es False, llama al método spinCounterClockwise de aWidget. La estructura de control If...Then...Else finaliza con End If.

El bucle For...Next dentro de cada bloque llama al método adecuado un número de veces igual al valor del parámetro revolutions.

Instrucciones de asignación

Las instrucciones de asignación llevan a cabo operaciones de asignación, que consisten en tomar el valor al lado derecho del operador de asignación (=) y almacenarlo en el elemento de la izquierda, como en el ejemplo siguiente.

v = 42

En el ejemplo anterior, la instrucción de asignación almacena el valor literal 42 en la variable v.

Elementos de programación válidos

El elemento de programación al lado izquierdo del operador de asignación debe poder aceptar y almacenar un valor. Esto significa que debe ser una variable o una propiedad que no sea ReadOnly o debe ser un elemento de matriz. En el contexto de una instrucción de asignación, este elemento se denomina a veces lvalue, para "valor a la izquierda".

El valor al lado derecho del operador de asignación se genera mediante una expresión, que puede constar de cualquier combinación de literales, constantes, variables, propiedades, elementos de matriz, otras expresiones o llamadas de función. Esto se ilustra en el siguiente ejemplo:

x = y + z + FindResult(3)

En el ejemplo anterior se agrega el valor que se mantiene en la variable y al valor mantenido en la variable z y, luego, se agrega el valor devuelto por la llamada a la función findResult. A continuación, el valor total de esta expresión se almacena en la variable x.

Tipos de datos en instrucciones de asignación

Además de los valores numéricos, el operador de asignación también puede asignar valores String, como se muestra en el ejemplo siguiente.

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

También puede asignar valores Boolean, mediante un literal Boolean o una expresión Boolean, como se muestra en el ejemplo siguiente.

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.

Del mismo modo, puede asignar valores adecuados a los elementos de programación del tipo de datos Char, Date o Object. También puede asignar una instancia de objeto a un elemento declarado como de la clase desde la que se crea esa instancia.

Instrucciones de asignación compuestas

Las instrucciones de asignación compuestas realizan primero una operación sobre una expresión antes de asignarla a un elemento de programación. En el ejemplo siguiente se muestra uno de estos operadores, +=, que incrementa el valor de la variable al lado izquierdo del operador en el valor de la expresión a la derecha.

n += 1

En el ejemplo anterior se agrega 1 al valor de n y, luego, se almacena ese nuevo valor en n. Es un equivalente abreviado de la siguiente instrucción:

n = n + 1

Se pueden realizar diversas operaciones de asignación compuestas mediante operadores de este tipo. Para obtener una lista de estos operadores y más información sobre ellos, consulte Operadores de asignación.

El operador de asignación de concatenación (&=) es útil para agregar una cadena al final de cadenas ya existentes, como se muestra en el ejemplo siguiente.

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

Conversiones de tipos en instrucciones de asignación

El valor que asigne a una variable, propiedad o elemento de matriz debe ser de un tipo de datos adecuado para ese elemento de destino. En general, debe intentar generar un valor del mismo tipo de datos que el del elemento de destino. Sin embargo, algunos tipos se pueden convertir a otros tipos durante la asignación.

Para información sobre la conversión entre tipos de datos, consulte Conversiones de tipos en Visual Basic. En resumen, Visual Basic convierte automáticamente un valor de un tipo dado en cualquier otro tipo al que se amplíe. Una conversión de ampliación es aquella que siempre funciona correctamente en tiempo de ejecución y no pierde ningún dato. Por ejemplo, Visual Basic convierte un valor Integer en Double cuando corresponda, ya que Integer se amplía a Double. Para obtener más información, consulta Widening and Narrowing Conversions.

Las conversiones de restricción (aquellas que no se amplían) conllevan un riesgo de error en tiempo de ejecución o de pérdida de datos. Puede realizar una conversión de restricción explícitamente mediante una función de conversión de tipos, o bien puede dirigir al compilador para que realice todas las conversiones implícitamente estableciendo Option Strict Off. Para más información, consulte Conversiones implícitas y explícitas.

Colocación de varias instrucciones en una línea

Puede tener varias instrucciones en una sola línea separadas por el carácter de dos puntos (:). Esto se ilustra en el siguiente ejemplo:

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

Aunque en ocasiones es conveniente, esta forma de sintaxis hace que el código sea difícil de leer y mantener. Por lo tanto, se recomienda mantener una instrucción en una línea.

Continuación de una instrucción en varias líneas

Normalmente, una instrucción cabe en una línea, pero cuando es demasiado larga, puede continuarla en la siguiente mediante una secuencia de continuación de línea, que consta de un espacio seguido de un carácter de subrayado (_) seguido de un retorno de carro. En el ejemplo siguiente, la instrucción ejecutable MsgBox continúa en dos líneas.

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

Continuación de línea implícita

En muchos casos, puede continuar una instrucción en la siguiente línea consecutiva sin usar el carácter de subrayado (_). Los siguientes elementos de sintaxis continúan implícitamente la instrucción en la siguiente línea de código.

  • Detrás de una coma (,). Por ejemplo:

    Public Function GetUsername(ByVal username As String,
                                ByVal delimiter As Char,
                                ByVal position As Integer) As String
    
        Return username.Split(delimiter)(position)
    End Function
    
  • Detrás de un paréntesis de apertura (() o delante de un paréntesis de cierre ()). Por ejemplo:

    Dim username = GetUsername(
        Security.Principal.WindowsIdentity.GetCurrent().Name,
        CChar("\"),
        1
      )
    
  • Detrás de una llave de apertura ({) o delante de una llave de cierre (}). Por ejemplo:

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

    Para más información, consulte Inicializadores de objetos: tipos con nombre y anónimos o Inicializadores de colección.

  • Detrás de una expresión insertada de apertura (<%=) o delate de una expresión insertada de cierre (%>) dentro de un literal XML. Por ejemplo:

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

    Para más información, consulte Expresiones insertadas en XML.

  • Detrás del operador de concatenación (&). Por ejemplo:

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

    Para más información, consulte Operadores enumerados por funcionalidad.

  • Detrás de los operadores de asignación (=, , &=:=, +=, -=*=/=\=^=<<=, >>=). Por ejemplo:

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

    Para más información, consulte Operadores enumerados por funcionalidad.

  • Detrás de los operadores binarios (+, -, /, *, Mod, <>, <, >, <=, >=, ^, >>, <<, And, AndAlso, Or, OrElse, Like, Xor) dentro de una expresión. Por ejemplo:

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

    Para más información, consulte Operadores enumerados por funcionalidad.

  • Detrás de los operadores Is y IsNot. Por ejemplo:

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

    Para más información, consulte Operadores enumerados por funcionalidad.

  • Detrás de un carácter calificador de miembro (.) y delante del nombre del miembro. Por ejemplo:

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

    Sin embargo, debe incluir un carácter de continuación de línea (_) después de un carácter calificador de miembro cuando use la instrucción With o proporcione valores en la lista de inicialización para un tipo. Considere la posibilidad de dividir la línea después del operador de asignación (por ejemplo, =) cuando se usen instrucciones With o listas de inicialización de objetos. Por ejemplo:

    ' 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 más información, consulte Instrucción With... End With o Inicializadores de objetos: Tipos con nombre y anónimos.

  • Detrás de un calificador de propiedad del eje XML (. o .@...). Sin embargo, debe incluir un carácter de continuación de línea (_) cuando especifique un calificador de miembro cuando use la palabra clave With. Por ejemplo:

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

    Para más información, consulte Propiedad de eje XML.

  • Detrás de un signo menor que (<) o delate de un signo mayor que (>) al especificar un atributo. También después de un signo mayor que (>) al especificar un atributo. Sin embargo, debe incluir un carácter de continuación de línea (_) al especificar atributos de nivel de ensamblado o de nivel de módulo. Por ejemplo:

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

    Para más información, consulte Introducción a los atributos.

  • Delante y detrás de operadores de consulta (Aggregate, Distinct, From, Group By, Group Join, Join, Let, Order By, Select, Skip, Skip While, Take, Take While, Where, In, Into, On, Ascending y Descending). No se puede romper una línea entre las palabras clave de los operadores de consulta formados por varias palabras clave (Order By, Group Join, Take While y Skip While). Por ejemplo:

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

    Para más información, consulte y .

  • Detrás de la palabra clave In en una instrucción For Each. Por ejemplo:

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

    Para más información, consulte Instrucción For Each...Next.

  • Detrás de la palabra clave From en un inicializador de colección. Por ejemplo:

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

    Para obtener más información, vea Inicializadores de colección.

Agregar comentarios

El código fuente no siempre se explica por sí mismo, incluso para el programador que lo escribió. Por lo tanto, para ayudar a documentar su código, la mayoría de los programadores hacen uso libre de los comentarios insertados. Los comentarios en el código pueden explicar un procedimiento o una instrucción determinados a cualquier persona que lo lea o trabaje con él más adelante. Visual Basic omite los comentarios durante la compilación y no afectan al código compilado.

Las líneas de comentario comienzan con un apóstrofo (') o REM seguido de un espacio. Se pueden agregar en cualquier parte del código, excepto dentro de una cadena. Para anexar un comentario a una instrucción, inserte un apóstrofo o REM detrás de la instrucción, seguido del comentario. Los comentarios también pueden ir en su propia línea aparte. En el ejemplo siguiente se muestran estas posibilidades.

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

Comprobación de errores de compilación

Si, después de escribir una línea de código, la línea se muestra con un subrayado azul ondulado (también puede aparecer un mensaje de error), hay un error de sintaxis en la instrucción . Debe averiguar lo que está mal (buscar en la lista de tareas o mantener el puntero del mouse sobre el error y leer el mensaje de error) y corregirlo. Hasta que no haya corregido todos los errores de sintaxis en el código, el programa no se compilará correctamente.

Término Definición
Operadores de asignación Proporciona vínculos a páginas de referencia de lenguaje que abarcan operadores de asignación, como =, *= y &=.
Operadores y expresiones Muestra cómo combinar elementos con operadores para producir nuevos valores.
Procedimiento Interrupción y combinación de instrucciones en código Muestra cómo dividir una sola instrucción en varias líneas y cómo colocar varias instrucciones en la misma línea.
Procedimiento Instrucciones de etiquetas Muestra cómo etiquetar una línea de código.