VISUAL BASIC

Estructura de Visual Basic



Un programa de Visual Basic se crea a partir de bloques de creación estándar. Una solución consta de uno o varios proyectos. Un proyecto a su vez puede contener uno o más ensamblados. Cada ensamblado se compila a partir de uno o varios archivos de código fuente. El archivo de código fuenteproporciona la definición e implementación de clases, estructuras, módulos e interfaces, que en última instancia contienen todo el código.
Elementos de programación en el nivel de archivo
Al iniciar un proyecto o archivo y abrir el editor de código, verá que ya hay código en el lugar que le corresponde y en el orden correcto. Cualquier código que escriba debe seguir la siguiente secuencia:
  1. Instrucciones Option
  2. Instrucciones Imports
  3. Instrucciones Namespace y elementos del nivel de espacio de nombres
Si escribe instrucciones en un orden distinto, pueden producirse errores de compilación.
Un programa también puede contener instrucciones de compilación condicional. Pueden incluirse en el archivo de código fuente entre las instrucciones de la secuencia anterior.

Instrucciones Option


Las instrucciones Option establecen reglas de base para el código subsiguiente, y de esta forma ayudan a prevenir errores de sintaxis y de lógica. Option Explicit (Instrucción, Visual Basic) garantiza que se declaran todas las variables y que se escriben correctamente, lo que reduce el tiempo de depuración. La instrucción Option Strict (Instrucción) ayuda a reducir errores de lógica y pérdidas de datos que puedan producirse al trabajar entre variables de diferentes tipos de datos. Option Compare (Instrucción) especifica la manera en que se comparan las cadenas entre sí, según sus valores Binary o Text.

Instrucciones Imports


Puede incluir Instrucción Imports (Tipo y espacio de nombres de .NET) para importar nombres definidos fuera del proyecto. Las instrucciones Imports permiten que el código haga referencia a clases y otros tipos definidos en el espacio de nombres importado sin tener que calificarlos.Puede utilizar tantas instrucciones Imports como sea necesario. Para obtener más información, vea Referencias y la instrucción Imports (Visual Basic).

Instrucciones Namespace


Los espacios de nombres ayudan a organizar y clasificar los elementos de programación para facilitar la agrupación y el acceso. Utiliza Namespace (Instrucción) para clasificar las instrucciones siguientes dentro de un espacio de nombres determinado. Para obtener más información, vea Espacios de nombres en Visual Basic.

Instrucciones de compilación condicional


Las instrucciones de compilación condicional pueden aparecer prácticamente en cualquier parte del archivo de código fuente. Determinan que partes del código se incluyan o excluyan en tiempo de compilación en función de ciertas condiciones. También puede utilizarlas para depurar la aplicación, ya que el código condicional se ejecuta únicamente en modo de depuración. Para obtener más información, vea Compilación condicional en Visual Basic.

Elementos de programación en el nivel de espacio de nombres


Las clases, estructuras y módulos contienen todo el código del archivo de código fuente. Son elementos del nivel de espacio de nombres, que pueden aparecer dentro de un espacio de nombres o en el nivel del archivo de código fuente. Contienen las declaraciones de todos los demás elementos de programación. Las interfaces, que definen firmas de elemento pero no proporcionan ninguna implementación, también aparecen en el nivel de módulo. Para obtener más información sobre los elementos del nivel de módulo, vea los siguientes temas:
Los elementos de datos en el nivel de espacio de nombres son las enumeraciones y los delegados.

Elementos de programación en el nivel de módulo


Los procedimientos, operadores, propiedades y eventos son los únicos elementos de programación que pueden contener código ejecutable (instrucciones que realizan acciones en tiempo de ejecución). Son elementos del nivel de módulo del programa. Para obtener más información sobre los elementos del nivel de procedimiento, vea los siguientes temas:
Los elementos de datos en el nivel de módulo son las variables, las constantes, las enumeraciones y los delegados.

Elementos de programación en el nivel de procedimiento


La mayoría del contenido de los elementos del nivel de procedimiento son instrucciones ejecutables, que constituyen el código en tiempo de ejecución del programa. Todo el código ejecutable debe estar incluido en algún procedimiento (FunctionSubOperatorGetSetAddHandlerRemoveHandlerRaiseEvent). Para obtener más información, vea Instrucciones en Visual Basic.
Los elementos de datos en el nivel de procedimiento se limitan a las constantes y las variables locales.

Procedimiento Main


El procedimiento Main es el primer código que se ejecuta cuando se ha cargado su aplicación. Main actúa como punto de partida y control general de la aplicación. Hay cuatro variedades de Main:
  • Sub Main()
  • Sub Main(ByVal cmdArgs() As String)
  • Function Main() As Integer
  • Function Main(ByVal cmdArgs() As String) As Integer
La variedad más común de este procedimiento es Sub Main(). Para obtener más información, vea Procedimiento Main en Visual Basic.

Tipos de Datos

La tabla siguiente muestran los tipos de datos de Visual Basic, sus tipos auxiliares de common language runtime, su asignación de almacenamiento nominal y sus intervalos de valores.
Tipo de Visual BasicEstructura de tipo de Common language runtimeAsignación de almacenamiento nominalIntervalo de valores
BooleanBooleanDepende de la plataforma de implementaciónTrue o False
ByteByte1 byte0 y 255 (sin signo)
Char(carácter individual)Char2 bytesde 0 a 65535 (sin signo)
DateDateTime8 bytes0:00:00 (medianoche) del 1 de enero de 0001 a 11:59:59 P.M. del 31 de diciembre de 9999
DecimalDecimal16 bytesde 0 a +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9... E + 28)  sin ningún separador decimal; de 0 a +/-7,9228162514264337593543950335 con 28 posiciones a la derecha del separador decimal;

número más pequeño distinto de cero es +/-0.0000000000000000000000000001 (+/-1E-28) 
Doble (punto flotante de precisión doble)Double8 bytes-1, 79769313486231570E + 308 a - 4, 94065645841246544E-324  para los valores negativos;

4, 94065645841246544E-324 a 1, 79769313486231570E + 308  para los valores positivos
IntegerInt324 bytes-2.147.483.648 y 2.147.483.647 (con signo)
Long (entero largo)Int648 bytes-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 (9.2 … E + 18 ) (con signo)
ObjetoObject(clase)4 bytes en plataforma de 32 bits

8 bytes en la plataforma de 64 bits
Cualquier tipo puede almacenarse en una variable de tipoObject
SByteSByte1 byte-128 a 127 (con signo)
Short (entero corto)Int162 bytes-32.768 a 32.767 (con signo)
Solo (punto flotante de precisión simple)Single4 bytes-3, 4028235E + 38 a - 1, 401298E-45  para los valores negativos;

1, 401298E-45 a 3, 4028235E + 38  para los valores positivos
Cadena (longitud variable)String (clase)Depende de la plataforma de implementación0 a aproximadamente 2 mil millones de caracteres Unicode
UIntegerUInt324 bytesde 0 a 4.294.967.295 (sin signo)
ULongUInt648 bytesde 0 a 18.446.744.073.709.551.615 (1.8 … E + 19 ) (sin signo)
Definido por el usuario (estructura)(se hereda de ValueType)Depende de la plataforma de implementaciónCada miembro de la estructura tiene un intervalo determinado por su tipo de datos y es independiente de los intervalos de los otros miembros
UShortUInt162 bytesde 0 a 65.535 (sin signo)
En notación científica, "E" hace referencia a una potencia de 10. Por lo que significa que 3.56E + 2 3.56 x 102 o 356 y 3.56E-2 significa 3.56 / 102 o 0.0356.

Estructura Repetitivas

Las estructuras de bucles de Visual Basic permiten ejecutar una o varias líneas de código de forma repetitiva. Puede repetir las instrucciones de una estructura de bucles hasta que una condición sea True, una condición sea False, un número de veces especificado o una vez para cada objeto de una colección.
En el siguiente ejemplo se muestra una estructura de bucle que ejecuta un conjunto de instrucciones hasta que una condición se convierta en verdadera.


Ejecutar un conjunto de instrucciones hasta que una condición se convierta en verdadera 

Gráfico de flujo de un bucle Do...Until

  • Bucles While: La construcción While...End While ejecuta un conjunto de instrucciones mientras la condición especificada en la instrucción While sea True. 
  • Bucles Do: La construcción Do...Loop le permite probar una condición al comienzo o al final de una estructura de bucle. También puede especificar si repite el bucle mientras la condición sigue siendo True o hasta que se convierta en True.
  • Bucles For: La construcción For...Next ejecuta el bucle un número fijo de veces. Utiliza una variable de control de bucle, también denominada contador para realizar el seguimiento de las repeticiones. Especifica los valores de inicio y fin de este contador, y puede especificar opcionalmente la cantidad en la que se incrementa de una repetición a la siguiente.
  • Bucles For Each: La construcción For Each...Next ejecuta un conjunto de instrucciones una vez para cada elemento de una colección. Especifica la variable de control de bucle pero no tiene que determinar los valores de inicio y fin para ella.

Estructuras Condicionales:

Las estructuras condicionales nos permiten ejecutar una serie de instrucciones si cumple una determinada condición que nosotros le indiquemos. Es importante recordar que la condición debe dar un resultado booleano, por lo que lo mas normal es usar operadores relacionales y condicionales. Tenemos varios tipos de estructuras condicionales:

  • if: le indicamos una condición si esta es verdadera se ejecuta, sino no se ejecuta las instrucciones de dentro. Se suele traducir como “Si se cumple esta condición haz esto”. Su sintaxis es:
if condicion then

     'Instrucciones

end if

Por ejemplo:
Module Module1

    Sub Main()

        Dim precio As Integer = 300

        If precio > 100 Then
            Console.WriteLine("El precio es mayor que 100")
        End If

        Console.ReadLine ()

    End Sub

End Module

Donde colocamos la condición, podemos colocar una variable booleana, ya que su valor puede ser true o false.
  • if – else: es como el anterior solo que después de cerrarse la llave de if, se añade else sin indicarle ninguna condición. Esto sirve para que si la condición del if no es verdadera, ejecute otras instrucciones que estarán dentro de else. Se suele traducir como “Si se cumple esta condición haz esto y sino haz esto”.
Veamos un ejemplo:
Module Module1

    Sub Main()

        Dim precio As Integer = 50

        If precio > 100 Then
            Console.WriteLine("El precio es mayor que 100")
        Else
            Console.WriteLine("El precio es menor que 100")
        End If
    End Sub

End Module
En este caso, se ejecutara lo que hay en else ya que no cumple la condición.
  • if -else if: esta estructura es como una mezcla de los anteriores, esto nos permite, que si no se cumple la condición podamos indicar otra condición para hacerlo aún mas especifico. Se suele traducir como  “Si se cumple esta condición haz esto y sino si cumple esta condición haz esto”.

Veamos un ejemplo:
Module Module1

    Sub Main()

        Dim precio As Integer = 50

        If precio > 100 Then
            Console.WriteLine("El precio es mayor que 100")
        ElseIf precio > 80 Then
            Console.WriteLine("El precio es mayor que 80")
        Else
            Console.WriteLine("El precio es menor que 80")
        End If
    End Sub

End Module

El ejemplo anterior  es equivalente al siguiente, esto es lo que se conoce como if anidados, podemos anidar tantos como queramos:
Module Module1

    Sub Main()

        Dim precio As Integer = 50

        If precio > 100 Then
            Console.WriteLine("El precio es mayor que 100")
        Else
            If precio > 80 Then
                Console.WriteLine("El precio es mayor que 80")
            Else
                Console.WriteLine("El precio es menor que 80")
            End If
        End If
    End Sub

End Module
  • Select: esta estructura condicional de selección múltiple, le damos un valor (puede ser una variable) y una lista de casos y si cumple alguno de los casos ejecuta las instrucciones asociadas a ella, en caso de que ninguna sea podemos indicarle que hace por defecto, normalmente se usa para indicar de un error con un mensaje. Su sintaxis es:
Select valor
            Case caso1
                'Instrucciones
            Case caso2
                'Instrucciones
            Case casoN
                'Instrucciones
            Case Else
                'Instrucciones
        End Select

Los case de un select se pueden escribir con rangos con To, por ejemplo, 1 TO 5, también podemos usar comas para indicar varios valores. Por ejemplo:
Module Module1

    Sub Main()

        Dim valor As Integer = 3

        Select Case valor
            Case 1 To 5
                Console.WriteLine("El valor esta entre 1 y 5")
                Console.WriteLine("El valor esta es 6 o 8 o 9")
            Case Else
                Console.WriteLine("El valor es otro")
        End Select

        Console.ReadLine()

    End Sub

End Module

Funciones

Declaración

Una variable se declara para especificar su nombre y sus características. La instrucción de declaración para variables es Instrucción Dim (Visual Basic).Su ubicación y contenido determinan las características de la variable.

Niveles de declaración


Valor local y variables miembros


Una variable local es aquella que se declara dentro de un procedimiento. Una variable miembro es un miembro de un tipo de Visual Basic; se declara en el nivel de módulo, dentro de una clase, estructura o módulo, pero no dentro de ningún procedimiento interno de esa clase, estructura o módulo.

Variables compartidas y de instancias


La categoría de una variable miembro, en una clase o estructura, depende de que la variable esté o no compartida. Si una variable se declara con la palabra clave Shared, es una variable compartida, y existe en una única copia compartida por todas las instancias de la clase o estructura.
De lo contrario, es una variable de instancia, y se crea una copia independiente de ella para cada instancia de la clase o estructura. Una copia determinada de una variable de instancia sólo está disponible en la instancia de la clase o estructura en que se creó. Es independiente de una copia de la variable de instancia en cualquier otra instancia de la clase o estructura.

Declarar el tipo de datos


La cláusula As de la instrucción de declaración permite definir el tipo de datos o de objetos de la variable que se está declarando. Se puede especificar cualquiera de los siguientes tipos para una variable:
  • Un tipo de datos básico, como BooleanLong o Decimal.
  • Un tipo de datos compuesto, como una matriz o una estructura.
  • Un tipo de objeto o clase, definido en su aplicación o en otra aplicación
  • Clase de .NET Framework, como Label o TextBox
  • Un tipo de interfaz, como IComparable o IDisposable
Se pueden declarar varias declarar distintas variables en la misma instrucción sin necesidad de repetir el tipo de datos. En las instrucciones siguientes, las variables ijk se declaran como tipo Integerl y m como Long, y x e y como Single:
Dim i, j, k As Integer
' All three variables in the preceding statement are declared as Integer.
Dim l, m As Long, x, y As Single
' In the preceding statement, l and m are Long, x and y are Single.

Inferencia de tipo de variable local


La inferencia de tipos se usa para determinar los tipos de datos de las variables locales que se han declarado sin ninguna cláusula As. El compilador deduce el tipo de la variable a partir del tipo de la expresión de inicialización. Esto permite declarar variables sin especificar un tipo de forma explícita. En el ejemplo siguiente, num1 y num2 están fuertemente tipados como enteros.
Public Sub inferenceExample()

    ' Using explicit typing. 
    Dim num1 As Integer = 3

    ' Using local type inference. 
    Dim num2 = 3

End Sub

Características de variables declaradas


El período de duración de una variable representa el tiempo durante el cual la variable está disponible para que pueda ser utilizada. En general, una variable existe mientras el elemento que lo declara (como un procedimiento o clase) siga existiendo. Si la variable no necesita seguir existiendo más allá de la duración de su elemento contenedor, no necesita hacer nada especial en la declaración. Si la variable debe seguir existiendo durante más tiempo que su elemento contenedor, puede incluir la palabra clave Static o Shared en su instrucción Dim.
El ámbito de una variable está formado por todo código que puede hacer referencia a la variable sin tener que calificar su nombre. El ámbito de una variable está determinado por la ubicación en la que se haya declarado la variable. El código de una región determinada puede utilizar las variables definidas en dicha región sin necesidad de especificar los nombres de las variables.
El nivel de acceso de una variable es la extensión de código que tiene permiso para tener acceso a ella. El modificador de acceso (como Public (Visual Basic) o Private (Visual Basic)) que utiliza en la instrucción Dim es quien determina esto.

Invocación
Se invoca un Sub procedimiento explícitamente con una instrucción llamada independiente. No se puede llamar a mediante su nombre en una expresión. Debe proporcionar valores para todos los argumentos que no son opcionales, y debe incluir la lista de argumentos entre paréntesis. Si no se proporcionan argumentos, se pueden omitir los paréntesis. El uso de la Call palabra clave es opcional, pero no se recomienda.
La sintaxis de una llamada a un Sub procedimiento es el siguiente:
[Call] nombre secundario [( argumentlist)]
Puede llamar a un Sub método desde fuera de la clase que lo define. En primer lugar, tiene que utilizar el New palabra clave se debe crear una instancia de la clase o llamar a un método que devuelve una instancia de la clase. Para obtener más información, consulte New (operador). A continuación, puede utilizar la siguiente sintaxis para llamar a la Sub método en el objeto de instancia:
ObjetoMethodName[(argumentlist)]

Ilustración de declaración y llamada

El siguiente Sub procedimiento explica el usuario del equipo la tarea que la aplicación está a punto de realizar y también muestra una marca de tiempo. En lugar de duplicar este código al principio de cada tarea, la aplicación simplemente llama tellOperator desde diversas ubicaciones. Cada llamada pasa una cadena en el task argumento que identifica la tarea que se va a iniciar.
VB
Sub tellOperator(ByVal task As String)
    Dim stamp As Date
    stamp = TimeOfDay()
    MsgBox("Starting " & task & " at " & CStr(stamp))
End Sub
En el ejemplo siguiente se muestra una llamada típica a tellOperator.
VB
tellOperator("file update")

Implementación
Las Interfaces definen las propiedades, métodos y eventos que pueden implementar las clases. Las interfaces le permiten definir características como grupos pequeños de propiedades, métodos y eventos estrechamente relacionados; de esta forma se reducen los problemas de compatibilidad, ya que pueden desarrollarse implementaciones mejoradas para las interfaces sin poner en peligro el código existente. Se pueden agregar nuevas características en cualquier momento, mediante el desarrollo de implementaciones e interfaces adicionales.
Existen otras razones por las que se podría desear utilizar interfaces en lugar de la herencia de clases:
  • Las interfaces admiten mejor las situaciones en las cuales las aplicaciones necesitan el mayor número de tipos de objetos no relacionados posible para proporcionar determinadas funciones.
  • Las interfaces son más flexibles que las clases de base, porque puede definir una única implementación que puede implementar interfaces múltiples.
  • Las interfaces son mejores en situaciones en las que no es necesario heredar una implementación de una clase de base.
  • Las interfaces son útiles cuando no se puede usar la herencia de clases. Por ejemplo, las estructuras no pueden heredarse de las clases, pero pueden implementar interfaces.

Declarar las interfaces


Las definiciones de interfaz se encuentran dentro de las instrucciones Interface y End Interface. Después de la instrucción Interface, puede agregar una instrucción Inherits opcional que proporciona una lista de una o varias interfaces heredadas. Las instrucciones Inherits deben ir antes que el resto de instrucciones de una declaración, a excepción de los comentarios. El resto de instrucciones de una definición de interfaz deberían ser instrucciones EventSubFunctionPropertyInterfaceClassStructure y Enum. Las interfaces no pueden contener código de implementación ni instrucciones asociadas a código de implementación, como End Sub o End Property.
En un espacio de nombres, las instrucciones de interfaz son de manera predeterminada Friend, pero también se pueden declarar explícitamente como Public o Friend. Las interfaces definidas dentro de las clases, módulos, interfaces y estructuras son de manera predeterminada Public, pero también se pueden declarar explícitamente como PublicFriendProtected o Private.
Nota Nota
La palabra clave Shadows se puede aplicar a todos los miembros de la interfaz. La palabra clave Overloads se puede aplicar a las instrucciones declaradas SubFunction y Property en la definición de una interfaz. Además, las instrucciones Property pueden tener los modificadores DefaultReadOnly o WriteOnly. No se permite ninguno del resto de los modificadores: PublicPrivateFriendProtectedSharedOverridesMustOverride o Overridable. Para obtener más información, vea Contextos de declaración y niveles de acceso predeterminados (Visual Basic).
Por ejemplo, en el código siguiente se define una interfaz con una función, una propiedad y un evento.
Interface IAsset
    Event ComittedChange(ByVal Success As Boolean)
    Property Division() As String 
    Function GetID() As Integer 
End Interface

Implementar interfaces


La palabra reservada Implements de Visual Basic se usa de dos formas. La instrucción Implements significa que una clase o estructura implementa una interfaz. La palabra clave Implements significa que un miembro de clase o de estructura implementa un miembro de interfaz específico.

Implements (Instrucción)


Si una clase o estructura implementa una o más interfaces, debe incluir la instrucción Implements inmediatamente después de la instrucción Class o Structure. La instrucción Implements exige que una lista separada por comas de interfaces sea implementada por una clase. La clase o estructura debe implementar todos los miembros de interfaz mediante la palabra clave Implements.

La palabra clave Implements


La palabra clave Implements requiere una lista separada por comas de los miembros de la interfaz que deben implementarse. Por lo general, se especifica solamente un único miembro de interfaz, pero se pueden especificar varios miembros. La especificación de un miembro de interfaz consta del nombre de la interfaz, que debe especificarse en una instrucción Implements dentro de la clase, un punto y el nombre del evento, propiedad o función miembro que debe implementarse. El nombre de un miembro que implementa un miembro de interfaz puede utilizar cualquier identificador permitido y no se limita a la convención InterfaceName_MethodName que se utilizaba en las versiones anteriores de Visual Basic.
Por ejemplo, el código siguiente muestra cómo declarar una subrutina denominada Sub1 que implementa un método de una interfaz:
Class Class1
    Implements interfaceclass.interface2

    Sub Sub1(ByVal i As Integer) Implements interfaceclass.interface2.Sub1
    End Sub 
End Class
Los tipos de parámetro y de valores devueltos del miembro que realiza la implementación deben coincidir con la propiedad de interfaz o la declaración de miembro de la interfaz. La forma más habitual de implementar un elemento de una interfaz es con un miembro que tenga el mismo nombre que la interfaz, como se muestra en el ejemplo anterior.
Para declarar la implementación de un método de interfaz, puede utilizar cualquier atributo permitido en las declaraciones de método de instancia, incluidos OverloadsOverridesOverridablePublicPrivateProtectedFriendProtected FriendMustOverrideDefault y Static.El atributo Shared no está permitido, ya que define una clase en lugar de un método de instancia.
Con Implements también puede crear un único método que implemente varios métodos definidos en una interfaz, como en el ejemplo siguiente:
Class Class2
    Implements I1, I2

    Protected Sub M1() Implements I1.M1, I1.M2, I2.M3, I2.M4
    End Sub 
End Class
Puede utilizar un miembro privado para implementar un miembro de interfaz. Cuando un miembro privado implementa un miembro de una interfaz, el miembro pasa a estar disponible por medio de la interfaz, aunque no está disponible directamente en las variables de objeto para la clase.

Ejemplos de implementación de interfaces


Las clases que implementan una interfaz deben implementar todas sus propiedades, métodos y eventos.
El ejemplo siguiente define dos interfaces. La segunda interfaz, Interface2, hereda Interface1 y define un método y una propiedad adicional.
Interface Interface1
    Sub sub1(ByVal i As Integer)
End Interface 

' Demonstrates interface inheritance. 
Interface Interface2
    Inherits Interface1
    Sub M1(ByVal y As Integer)
    ReadOnly Property Num() As Integer 
End Interface
El ejemplo siguiente implementa Interface1, la interfaz definida en el ejemplo anterior:
Public Class ImplementationClass1
    Implements Interface1
    Sub Sub1(ByVal i As Integer) Implements Interface1.sub1
        ' Insert code here to implement this method. 
    End Sub 
End Class
El ejemplo final implementa Interface2, incluyendo un método heredado de Interface1:
Public Class ImplementationClass2
    Implements Interface2
    Dim INum As Integer = 0
    Sub sub1(ByVal i As Integer) Implements Interface2.sub1
        ' Insert code here that implements this method. 
    End Sub 
    Sub M1(ByVal x As Integer) Implements Interface2.M1
        ' Insert code here to implement this method. 
    End Sub 

    ReadOnly Property Num() As Integer Implements Interface2.Num
        Get
            Num = INum
        End Get 
    End Property 
End Class


Comments

Popular posts from this blog

COBOL

PASCAL

PHP