sábado, 6 de diciembre de 2014

Introducción al Lenguaje Visual Vasic.Net


Contenido
1.      Introducción al lenguaje Visual Basic. 1
1.1.       Generalidades. 1
1.2.       Declarar una variable, con y sin asignación del valor por defecto. 1
1.3.       Ámbito (niveles de accesibilidad). 1
1.4.       Ámbitos predeterminados (si no se indica). 2
1.5.       Resumen de operadores (Visual Basic). 2
1.6.       Resumen de constantes y declaraciones (Visual Basic). 2
1.7.       Resumen de flujos de control (Visual Basic). 3
2.      Particularidades del lenguaje. 3
2.1.       Instrucción If...Then...Else (Visual Basic). 3
2.2.       Instrucción Do...Loop (Visual Basic). 5
2.3.       Instrucción For...Next (Visual Basic). 8
2.4.       Instrucción For Each...Next (Visual Basic). 10
1.     Introducción al lenguaje Visual Basic.
1.1.   Generalidades
En Visual Basic .NET cada línea física es una sentencia, si necesitas que ocupe más de una línea, tendrás que usar el guión bajo al final de la línea y continuar en la siguiente. Esto no es aplicable a los comentarios. En VB.NET no se obliga a que se especifique el tipo de datos, pero si quieres hacer las cosas bien, deberías tener siempre conectado Option Strict On, esto te obligará a declarar las variables con el tipo de datos adecuado y así cuando hagas una asignación entre tipos diferentes de datos, tendrás que especificar el tipo, para ello hay que hacer una conversión explícita de datos (casting). Esto último es algo que muchos programadores de VB no suelen hacer, pero te lo recomiendo encarecidamente que lo hagas.
1.2.   Declarar una variable, con y sin asignación del valor por defecto
En Visual Basic .NET se utiliza de la siguiente forma:

<ámbito> <variable> As <tipo>
<ámbito> <variable> As <tipo> = <valor>
Ejemplos:
Dim Edad As Integer
Dim Edad As Integer = 3
Dim Peso As Double
Dim Peso As Double = 18.3
Dim Nombre As String
Dim Nombre As String = “Carlos Rodríguez”

En Visual Basic .NET cuando se declaran variables dentro de un procedimiento (método o propiedad) sólo se puede indicar Dim ya que esas variables serán privadas al procedimiento.
1.3.   Ámbito (niveles de accesibilidad)

Cualquiera de los miembros de una clase pueden tener un ámbito o nivel de accesibilidad que dependerá de cómo y desde dónde se podrá acceder a dicho miembro.
Los ámbitos pueden ser: privados, públicos, a nivel de ensamblado, etc.

Visual Basic .NET
Descripción del ámbito
Private
Accesible dentro del mismo módulo, clase o estructura.
Friend
Accesible desde dentro del mismo proyecto, pero no desde fuera de él.
Protected
Accesible desde dentro de la misma clase o desde una clase derivada de ella.
Protected Friend
Accesible desde clases derivadas o desde dentro del mismo proyecto, o ambos.
Public
Accesible desde cualquier parte del mismo proyecto, desde otros proyectos que hagan referencia al proyecto, y desde un ensamblado generado a partir del proyecto.
1.4.   Ámbitos predeterminados (si no se indica)

Cuando declaramos una variable, método, etc. y no indicamos el ámbito que tienen, el compilador le asigna uno de forma predeterminada, según el lenguaje que estemos usando o el tipo de elemento en el que estemos haciendo esa declaración, tendrá un ámbito o nivel de accesibilidad diferente.

En la siguiente tabla, podemos ver qué ámbito tendría, dependiendo de dónde se declare.
Miembros de
Accesibilidad predeterminada
Accesibilidades declaradas permitidas
Enum
Public
Ninguna
Class
Module
Public
Public
Protected
Friend
Private
Protected Friend
Interface
Public
Ninguna
Structure
Siempre hay que indicar el ámbito
Public
Friend
Private

1.5.   Resumen de operadores (Visual Basic)
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por uso y propósito.
Acción
Elemento del lenguaje
Operadores aritméticos
^, –, *, /, \, Mod, +, =
Asignación
=, ^=, *=, /=, \=, +=, -=, &=
Comparación
=, <>, <, >, <=, >=, Like, Is
Concatenación
&, +
Operadores lógicos y bit a bit
Not, And, Or, Xor, AndAlso, OrElse
Operaciones varias
AddressOf, Await, GetType
1.6.   Resumen de constantes y declaraciones (Visual Basic)
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por uso y propósito.
Acción
Elemento del lenguaje
Asignar un valor.
GetProperty
Declarar variables o constantes.
ConstDimPrivateProtectedPublicShadowsSharedStatic
Declarar una clase, un delegado, una enumeración, un módulo, un espacio de nombres o una estructura.
Class, Delegate, Enum, Module, Namespace, Structure
Crear objetos.
CreateObject , GetObject, New
Obtener información acerca de un objeto.
GetType, IsArray, IsDate, IsDBNull, IsError, IsNothing, IsNumeric, IsReference, SystemTypeName,TypeName, VarType, VbTypeName
Hacer referencia al objeto actual.
Me
1.7.   Resumen de flujos de control (Visual Basic)
Las palabras clave del lenguaje Visual Basic y los miembros de las bibliotecas en tiempo de ejecución están organizados por uso y propósito.
Acción
Elemento del lenguaje
Bucle.
Do...Loop, For...Next, For Each...Next, While...End While, With
Tomar decisiones.
Choose , If...Then...Else, Select Case, Switch
Utilizar procedimientos.
Call, Function, Property, Sub

2.     Particularidades del lenguaje.
2.1.   Instrucción If...Then...Else (Visual Basic)
Ejecuta condicionalmente un grupo de instrucciones en función del valor de una expresión.
If condición [ Then ]
    [Declaración del If]
[ ElseIf condición [ Then ]
    [Declaración del ElseIf] ]
[ Else
    [Declaración del Else] ]
End If
Elementos
Término
Definición
Condición
Requerido. Expresión. Debe evaluarse en True o False, o en un tipo de datos que sea implícitamente convertible a Boolean.
Si la expresión es una variable Valores NULL Boolean que evalúa Nada, se trata la condición como si la expresión no es True, y ejecuta el bloque Else .
Then
Obligatorio en la sintaxis de una línea, opcional en la sintaxis de varias líneas.
Declaración
Opcional. Se ejecutan una o más instrucciones que siguen a If...Then que se ejecutan si condition se evalúa como True.
ElseIf condición
Obligatorio si ElseIf está presente. Expresión. Debe evaluarse en True o False, o en un tipo de datos que sea implícitamente convertible a Boolean.
Declaración del ElseIf
Opcional. Se ejecutan una o más instrucciones que siguen a ElseIf...Then que se ejecutan si ElseIf condición se evalúa como True.
Declaración del Else
Opcional. Una o más instrucciones que se ejecutan si ninguna expresión Condición o ElseIf condición anterior se evalúa como True.
End If
Termina el bloque If...Then...Else.

Sintaxis de varias líneas
Cuando se encuentra una instrucción If...Then...Else, se prueba condición. Si condición es True, se ejecutan las instrucciones que están a continuación de Then. Si condición es False, cada instrucción ElseIf (si hay alguna) se evalúa en orden. Cuando se encuentra una ElseIf condición que sea True, se ejecutan las instrucciones que siguen inmediatamente a la instrucción ElseIf asociada. Si ElseIf condición se evalúa como True, o si no hay ninguna instrucción ElseIf, se ejecutan las instrucciones situadas después de Else. Después de la ejecución de las instrucciones que siguen a Then, ElseIf o Else, la ejecución continúa con la instrucción que sigue a End If.
Las cláusulas ElseIf y Else son opcionales. Puede tener tantas cláusulas ElseIf como desee en una instrucción If...Then...Else, pero no puede aparecer ninguna cláusula ElseIf después de una cláusula Else. If ...Then...Else las instrucciones se pueden anidar una dentro de otra.
Con la sintaxis de varias líneas, la instrucción If debe ser la única instrucción incluida en la primera línea. Las instrucciones ElseIf, Else y End If pueden ir precedidas solamente por una etiqueta de línea. El bloque If...Then...Else debe terminar con una instrucción End If.
Ejemplo
En el ejemplo siguiente se muestra el uso de la sintaxis de varias líneas de la instrucción If...Then...Else.
Dim count As Integer = 0
Dim message As String

If count = 0 Then
      message = "There are no items."
ElseIf count = 1 Then
       message = " Hay 1 artículo."
Else
       message = "Hay " & count & " artículos."
End If

El ejemplo siguiente contiene instrucciones If...Then...Else anidadas.
Private Function CheckIfTime() As Boolean
    ' Determinar el día actual de la semana y hora del día.
    Dim dayW As DayOfWeek = DateTime.Now.DayOfWeek
    Dim hour As Integer = DateTime.Now.Hour

    ' Retorna Verdadero si es  miércoles de 2 a 4 pm, o si es Jueves desde el mediodía hasta 13:00.
    If dayW = DayOfWeek.Wednesday Then
        If hour = 14 Or hour = 15 Then
            Return True
        Else
            Return False
        End If
    ElseIf dayW = DayOfWeek.Thursday Then
        If hour = 12 Then
            Return True
        Else
            Return False
        End If
    Else
        Return False
    End If
End Function

2.2.   Instrucción Do...Loop (Visual Basic)
Repite un bloque de instrucciones mientras una condición Boolean sea True o hasta que la condición se convierta en True.
Do { While | Until } condition
    [ statements ]
    [ Continue Do ]
    [ statements ]
    [ Exit Do ]
    [ statements ]
Loop

Elementos
Término
Definición
Do
Requerido. Inicia la definición del bucle Do.
While
Obligatorio a menos que se utilice Until. Repite el bucle hasta que condition sea False.
Until
Obligatorio a menos que se utilice While. Repite el bucle hasta que condition sea True.
condition
Opcional. Expresión Boolean. Si condition es Nothing, Visual Basic la trata como False.
statements
Opcional. Una o más instrucciones que se repiten mientras o hasta que condition sea True.
Continue Do
Opcional. Transfiere el control a la siguiente iteración del bucle de Do .
Exit Do
Opcional. Transfiere el control fuera del bucle Do.
Loop
Requerido. Termina la definición del bucle Do.

Utilice una estructura Do...Loop cuando desee repetir un conjunto de instrucciones un número indefinido de veces, hasta que se satisfaga una condición. Si desea repetir las instrucciones un número fijo de veces, la Instrucción For...Next es normalmente una opción mejor.
Puede usar While o Until para especificar condition, pero no ambas.
Puede probar condition solo una vez, en el inicio o el final del bucle. Si prueba condition al principio del bucle (en la instrucción Do), puede que el bucle no se ejecute ni siquiera una vez. Si prueba al final del bucle (en la instrucción Loop), el bucle siempre se ejecuta al menos una vez.
Generalmente, la condición es el resultado de comparar dos valores, pero también puede ser cualquier expresión que da como resultado un valor Boolean (Tipo de datos, Visual Basic) (True o False). Esto incluye los valores de otros tipos de datos, como los numéricos, que han sido convertidos a valores de tipo Boolean.
Se pueden anidar bucles Do colocando un bucle dentro de otro. También puede anidar distintos tipos de estructuras de control unos dentro de otros. Para obtener más información, vea Estructuras de control anidadas (Visual Basic).
Ejemplo
En el ejemplo siguiente, las instrucciones del bucle continúan ejecutándose hasta que la variable index es superior a 10. La cláusula Until está al final del bucle.
Dim index As Integer = 0
Do
    Debug.Write(index.ToString & " ")
    index += 1
Loop Until index > 10

Debug.WriteLine("")
' Salida: 0 1 2 3 4 5 6 7 8 9 10
En el ejemplo siguiente se utiliza una cláusula While en vez de una cláusula Until, y se prueba condition al inicio del bucle en lugar de al final.
Dim index As Integer = 0
Do While index <= 10
    Debug.Write(index.ToString & " ")
    index += 1
Loop

Debug.WriteLine("")
' Salida: 0 1 2 3 4 5 6 7 8 9 10
En el siguiente ejemplo, condition detiene el bucle cuando la variable index es superior a 100. La instrucción If del bucle, sin embargo, hace que la instrucción Exit Do detenga el bucle cuando la variable índice es mayor de 10.
Dim index As Integer = 0
Do While index <= 100
    If index > 10 Then
        Exit Do
    End If

    Debug.Write(index.ToString & " ")
    index += 1
Loop

Debug.WriteLine("")
' Salida: 0 1 2 3 4 5 6 7 8 9 10

En el ejemplo siguiente se leen todas las líneas de un archivo de texto. El método OpenText abre el archivo y devuelve un StreamReader que lee los caracteres. En la condiciónDo...Loop, el método Peek de StreamReader determina si hay caracteres adicionales.
Private Sub ShowText(ByVal textFilePath As String)
    If System.IO.File.Exists(textFilePath) = False Then
        Debug.WriteLine("Archivo no encontrado: " & textFilePath)
    Else
        Dim sr As System.IO.StreamReader = System.IO.File.OpenText(textFilePath)

        Do While sr.Peek() >= 0
            Debug.WriteLine(sr.ReadLine())
        Loop

        sr.Close()
    End If
End Sub
2.3.   Instrucción For...Next (Visual Basic)
Repite un grupo de instrucciones un número de veces especificado.
For counter [ As datatype ] = start To end [ Step step ]
    [ statements ]
    [ Continue For ]
    [ statements ]
    [ Exit For ]
    [ statements ]
Next [ counter ]

Elementos
Parte
Descripción
counter
Se requiere en la instrucción For. Variable numérica. Variable de control para el bucle.
datatype
Opcional. Tipo de datos de counter.
start
Requerido. Expresión numérica. Valor inicial de counter.
end
Requerido. Expresión numérica. Valor final de counter.
step
Opcional. Expresión numérica. Cantidad en la que se incrementa counter cada vez que se recorre el bucle.
statements
Opcional. Una o más instrucciones entre For y Next que se ejecutan un número especificado de veces.
Continue For
Opcional. Transfiere el control a la siguiente iteración del bucle.
Exit For
Opcional. Transfiere el control fuera del bucle For.
Next
Requerido. Termina la definición del bucle For.


Ejemplos simples
Utiliza una estructura de For…Next cuando desea repetir un conjunto de instrucciones un número fijo de veces.
En el ejemplo siguiente, la variable de index comienza con un valor de 1 y se incrementa con cada iteración del bucle, finalizando después de que el valor de index alcanza 5.
For index As Integer = 1 To 5
    Debug.Write(index.ToString & " ")
Next
Debug.WriteLine("")
' Salida: 1 2 3 4 5
 
En el ejemplo siguiente, la variable de number comienza en 2 y se decrementa en 0,25 en cada iteración del bucle, finalizando después de que el valor de number alcance 0. El argumento de Step de -0.25 reduce el valor en 0,25 en cada iteración del bucle.
For number As Double = 2 To 0 Step -0.25
    Debug.Write(number.ToString & " ")
Next
Debug.WriteLine("")
' Salida: 2 1.75 1.5 1.25 1 0.75 0.5 0.25 0 
Se pueden anidar bucles For colocando un bucle dentro de otro. En el ejemplo siguiente se muestran estructuras For...Next anidadas con valores de incremento diferentes. El bucle externo crea una cadena para cada iteración del bucle. El bucle interior disminuye una variable de contador de bucle por cada iteración del bucle.
For indexA = 1 To 3
    ' Crear un nuevo StringBuilder , que se utiliza
    ' para construir eficientemente cadenas.   
Dim sb As New System.Text.StringBuilder()

    ' Agrega al StringBuilder cada tercer número
    ' de 20 a 1 descendiendo.
    For indexB = 20 To 1 Step -3
        sb.Append(indexB.ToString)
        sb.Append(" ")
    Next indexB

    ' Mostrar la Línea.
    Debug.WriteLine(sb.ToString)
Next indexA
' Salida:
'  20 17 14 11 8 5 2
'  20 17 14 11 8 5 2
'  20 17 14 11 8 5 2

Cuando los bucles de anidamiento, cada bucle deben tener una variable única de counter.
Exit For y Continue For
La instrucción de Exit For inmediatamente sale del bucle de For…Next y transfiere el control a la instrucción que sigue a la instrucción de Next. La instrucción Continue For transfiere el control inmediatamente a la siguiente iteración del bucle. Para obtener más información.
En el siguiente ejemplo se muestra el uso de las instrucciones Continue For y Exit For.

For index As Integer = 1 To 100000
    ' Si el index esta entre 5 y 7, continue
    ' con la siguiente iteración.
    If index >= 5 And index <= 8 Then
        Continue For
    End If

    ' Muestra el valor de index.
    Debug.Write(index.ToString & " ")

    ' Si index es 10, sale del loop.
    If index = 10 Then
        Exit For
    End If
Next
Debug.WriteLine("")
' Salida: 1 2 3 4 9 10

Puede incluir cualquier número de instrucciones Exit For en un bucle For...Next. Cuando se utiliza dentro de bucles For…Next anidados, Exit For sale del bucle más profundo y transfiere el control al siguiente nivel de anidamiento.
2.4.   Instrucción For Each...Next (Visual Basic)
Repite un grupo de instrucciones para cada elemento de una colección.
For Each element [ As datatype ] In group
    [ statements ]
    [ Continue For ]
    [ statements ]
    [ Exit For ]
    [ statements ]
Next [ element ]

Elementos
Término
Definición
element
Se requiere en la instrucción For Each. Opcional en la instrucción Next. Variable. Se usa para recorrer en iteración los elementos de la colección.
datatype
Requerido si element aun no se ha declarado. Tipo de datos de element.
group
Requerido. Una variable con un tipo que es un tipo de colección o un objeto. Hace referencia a la colección sobre la que se debe repetir la ejecución destatements.
statements
Opcional. Una o más instrucciones entre For Each y Next que se ejecutan en cada elemento de group.
Continue For
Opcional. Transfiere el control al principio del bucle For Each.
Exit For
Opcional. Transfiere el control fuera del bucle For Each.
Next
Requerido. Termina la definición del bucle For Each.
Ejemplo simple
Utilice un bucle For Each...Next cuando desee repetir un conjunto.
En el siguiente ejemplo, la instrucción de For Each…Next recorre en iteración todos los elementos de una colección list.

' Crea una lista de strings para usar una
' colección inicializada.
Dim lst As New List(Of String)  From {"abc", "def", "ghi"}

' Itera atreves de la lista.
For Each item As String In lst
    Debug.Write(item & " ")
Next
Debug.WriteLine("")
' Salida: abc def ghi
Cuando una instrucción de For Each…Next ejecuta, Visual Basic evalúa la colección sólo una vez, antes de que el bucle se inicie. Si el bloque de instrucciones cambia element o group, estos cambios no afectan a la iteración del bucle.
Cuando todos los elementos de la colección se han asignado correctamente a element, el bucle For Each se detiene y el control pasa a la instrucción que sigue a la instrucción Next.
Si element no se ha declarado fuera de este bucle, éste debe ser en la instrucción de For Each. Puede declarar el tipo de element explícitamente mediante una instrucción As o bien puede basarse en la inferencia de tipos para asignar el tipo. En ambos casos, el ámbito de element es el cuerpo del bucle. Sin embargo, no se puede declarar element fuera y dentro del bucle.
Opcionalmente, puede especificarse element en la instrucción Next. Esto mejora la legibilidad del programa, sobre todo si se han anidado bucles For Each. La variable que se especifique debe ser igual a la que aparece en la instrucción For Each correspondiente.
Puede que desee evitar cambiar el valor de element dentro de un bucle. Esto puede hacer más difícil leer y depurar el código. Cambiar el valor de group no afecta a la colección o sus elementos, que se determinan cuando el bucle primero se escribió.
Cuando está bucles de anidamiento, si una instrucción de Next de un nivel de anidamiento externo se encuentra antes de que Next de un nivel interno, el compilador señala un error. Sin embargo, el compilador sólo puede detectar este error superpuesto si se especifica element en cada instrucción Next.
Si el código depende de recorrer una colección en un orden concreto, un bucle de For Each…Next no es la mejor opción, a menos que sepa las características del objeto de enumerador que la colección expone. El orden de recorrido no está determinada por Visual Basic, sino por el método de MoveNext del objeto de enumerador. Por tanto, tal vez no pueda predecir qué elemento de la colección es el primero que se devuelve en element o qué elemento es el siguiente en ser devuelto tras un elemento dado. Es posible obtener resultados más confiables si se utiliza una estructura de bucle diferente, tal como For...Next o Do...Loop.
El tipo de datos de element debe ser tal que el tipo de datos de los elementos de group se pueda convertir en él.