31 May

1 – Arreglos y Vectores (Arrays)

Los arreglos se utilizan para almacenar un conjunto de variables del mismo tipo de dato bajo un mismo nombre.

Por ejemplo, imaginemos que tenemos 20 variables de tipo String que almacenan nombres (nombre1, nombre2, etc.). Si quisiéramos pasar todas estas cadenas a minúsculas, tendríamos que utilizar la función LCase con cada variable: nombre1 = LCase(nombre1), nombre2 = LCase(nombre2), etc.

En cambio, si utilizáramos un arreglo, solucionaríamos el problema con este código:

Dim nombres(30) As String

For x = 0 To 30
  nombres(x) = LCase(nombres(x))
Next

Siguiendo el ejemplo anterior, en vez de escribir la sentencia LCase 30 veces para cada variable, hemos utilizado un arreglo llamado nombres con un índice de 30, es decir, que almacena 30 datos de tipo String.

1.1 – Declaración de Arreglos en el Código

Para crear un arreglo, primero se debe declarar como cualquier otra variable. La única diferencia es que debemos indicar la cantidad de elementos que contendrá, colocando el número de índice entre paréntesis. Por ejemplo:

  • Lo siguiente crea un arreglo de 15 elementos de tipo Integer: Dim miArreglo(1 To 15) As Integer
  • Esto crea un arreglo de 11 elementos de tipo String: Dim empleados(10) As String

Como podemos ver en el primer ejemplo, hemos declarado un arreglo llamado miArreglo y, entre paréntesis, hemos declarado el rango de capacidad del mismo, es decir, la cantidad de datos que podrá contener.

El primer número, el 1, indica el límite inferior del mismo, y el número 15 indica el límite máximo del arreglo, conformando de esta manera un arreglo que podrá almacenar 15 datos de tipo String.

En el segundo ejemplo, declaramos un arreglo de 11 elementos de tipo String. Como se puede ver, hemos indicado solo un número que representa el valor máximo del mismo. Cabe aclarar que hemos puesto de índice el número 10, pero en realidad el arreglo contiene 11 elementos, ya que cuando no indicamos el límite inferior, se asume que el mismo comienza desde el 0.

Importante: Los arreglos se dividen en dos grupos: los vectores y las matrices. Los vectores son arreglos que contienen una sola dimensión, y las matrices, dos o más dimensiones.

1.2 – Acceder a los Datos de un Arreglo

Para acceder a los datos de un arreglo o vector, debemos hacerlo mediante el índice o número del elemento del mismo. Por ejemplo:

Dim alumnos(1 To 4) As String

alumnos(1) = "Juan"
alumnos(2) = "Micaela"
alumnos(3) = "María"
alumnos(4) = "Ignacio"

Primero, declaramos un arreglo llamado alumnos, de tipo String, que contendrá 4 elementos. Luego, le asignamos un valor de cadena como a cualquier otra variable de tipo String, pero con la diferencia de que para referirnos al elemento utilizamos el número de índice del mismo.

Otro ejemplo:

Dim paises(2) As String

' Llena el vector con datos
paises(0) = "Argentina"
paises(1) = "Perú"
paises(2) = "Brasil"

' Recorre los elementos del vector
For x = 0 To 2
  MsgBox "Nombre del país: " & paises(x)
Next x

En este último ejemplo, declaramos y creamos un vector de 3 elementos que contendrá el nombre de 3 países. Luego, en un bucle For, utilizamos la función MsgBox para mostrar los elementos del arreglo, pasándole como parámetro del índice la variable x del bucle For.

¿Qué es una Colección?

Una colección es una lista de objetos o elementos que están agrupados en un objeto, en este caso, un objeto colección (o Collection). Items es una colección de elementos, es decir, los elementos están guardados en una «lista» de datos. Normalmente, trabajaremos con muchos tipos de colecciones: los iconos de la barra de herramientas son una colección de objetos botón, las impresoras instaladas en nuestro ordenador son una colección de objetos impresora, un libro de trabajo de Excel es una colección de hojas de cálculo…

Ya hemos añadido un elemento a la lista; si seguimos pulsando en añadir, vemos cómo vamos creando la lista con todos estos elementos… Veamos ahora cómo saber cuál es el elemento que se ha seleccionado de la lista y cómo asignarlo al TextBox. Es decir, el usuario selecciona un elemento y queremos que se escriba en el cuadro de texto. Observa este código:

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
  ' Cuando pulsamos en un elemento de la lista...
  With ListBox1
    TextBox1.Text = ListBox1.SelectedItem
  End With
End Sub

Fíjate en que, en este caso, no es el evento Click, como era de esperar (y como es en las versiones anteriores de VB), sino que el evento en cuestión es SelectedIndexChanged.

Ya te he comentado que lo que podemos añadir a los elementos del ListBox son objetos, pero lo que a nosotros nos interesa mostrar es el «texto» de dicho elemento, ya que no nos interesa otra cosa, más que nada porque lo que hemos añadido son textos y no objetos.

Lo que en este evento hacemos es asignar a la caja de textos el texto del elemento seleccionado: la propiedad SelectedItem representa al elemento seleccionado. Tranquilo, lo veremos más adelante… además, ¿qué es esto del With... End With? Esto sí que lo explico porque es sencillo. Cuando estamos trabajando con varias propiedades de un control u objeto (cuadro de lista en este caso), podemos hacerlo de esta forma:

TextBox1.Text = ListBox1.SelectedItem

Es decir, le indicamos el método o propiedad del control separado por un punto. Pero, en ocasiones, escribiremos muchas instrucciones sobre ese cuadro de lista… Para evitar escribir tantas veces el objeto con el que estamos trabajando, podemos utilizar la instrucción With... End With:

With ListBox1
  TextBox1.Text = .SelectedItem
End With

Que significa: «con el cuadro de lista ListBox1» haz lo siguiente… y cuando se encuentre una propiedad con el punto delante .SelectedItem sabe que debe ser del control que se indicó en el With. Es un poco para simplificar la sintaxis; la utilidad no va más allá de hacer el código más legible y puede omitirse tranquilamente su utilización y escribir en su lugar el objeto completo.

Creación de Objetos

Para crear una instancia de un objeto, usamos la sentencia Dim. La sintaxis general es como sigue:

Dim nombrevariable As [New] nombreclase

Aquí, nombrevariable es el nombre que utilizaremos para referirnos al objeto; sigue las reglas normales de los nombres de Visual Basic. nombreclase es el nombre de la clase que queremos crear una instancia. Por ejemplo:

Dim MiCadena As MiString

Esta sentencia no crea en realidad una instancia de la clase MiString, sino que solo crea una variable que puede referirse a una instancia. Para crear el objeto, hay que ejecutar:

Set MiCadena = New MiString

Si utilizamos la palabra reservada opcional New en la sentencia Dim, es innecesario utilizar la sentencia Set. Es decir, el siguiente código:

Dim MiCadena As New MiString

Tiene el mismo efecto que las dos sentencias anteriores.

¿Por qué entonces necesitamos la sentencia Set? Hay dos casos. Uno es cuando, en lugar de declarar la variable del objeto como un tipo específico, llamado early binding [enlace temprano], usamos la palabra reservada Object y hacemos late binding [enlace tardío]. El enlace tardío requiere declarar la variable del objeto como tipo genérico Object, en lugar de como un tipo de clase específico, referenciando luego una clase específica con la palabra reservada Set:

Dim MiObjeto As Object
Set MiObjeto = New MiString

El segundo caso es cuando queremos cambiar el objeto referenciado por una variable. Supongamos que hemos ejecutado el siguiente código:

Dim MiCadena1 As New MiString
Dim MiCadena2 As MiString
Set MiCadena2 = MiCadena1

Tendremos dos variables, MiCadena1 y MiCadena2, que se refieren al mismo objeto. Esta técnica puede ser útil en algunas tareas de programación.

Los enlaces tardíos ralentizan de algún modo las cosas, pero aportan la flexibilidad añadida de ser capaces de utilizar la misma variable del objeto para diferentes tipos de objetos. Por ejemplo:

Dim MiObjeto As Object
Set MiObjeto = New MiString
.............
Set MiObjeto = New OtraClase

Trabajar con referencias a objetos se parece mucho a trabajar con variables normales, salvo por el uso de las palabras reservadas Set y New.

Ejemplo

Debemos crear un sencillo programa de demostración para mostrar la clase MiString.

Utilizaremos el mismo proyecto donde se ha creado la clase MiString (ya tiene un formulario en blanco), añadiendo cinco controles Label, cinco controles TextBox y un grupo de controles de tres botones de comando.

Establecer la propiedad Text de todas las cajas de texto como una cadena en blanco. Asignar rótulos a los tres botones de comando como sigue:

  • Índice 0: Procesar
  • Índice 1: Limpiar
  • Índice 2: Salir

Las cajas de texto contendrán la cadena inicial, la cadena a insertar, la posición donde se insertará, el resultado y la longitud final.

La forma más sencilla y rápida de borrar todas las cajas de texto de un formulario es utilizando la sentencia For... Each y la colección Controls. Podemos explorar todos los controles de la lista; usando la palabra reservada TypeOf, podemos determinar si cada control es una caja de texto. Si lo es, establecemos su propiedad Text como una cadena en blanco.

Imagen g src=»//host.com/1.jpg»>

1 – Arreglos y vectores(arrays)
Los Arreglos se utilizan para almacenar un conjunto de variables, que sean del mismo tipo de dato, y todas estas bajo un mismo nombre.
Por ejemplo imaginemos que tenemos 20 variables de tipo String que almacenan nombres (nombre1, nombre2, etc..). si yo ahora quisiera pasar todas estas cadenas a minúsculas tendría que utilizar la función Lcase con cada variable: nombre1 = Lcase(nombre1), nombre2 = Lcase(nombre2), etc..
En cambio si utilizara un arreglo solucionaría mi problema solo a esto
Dim nombres(30) As String

For x = 0 To 30

nombres(x) = LCase(nombres(x))

Next
Siguiendo el ejemplo anterior: en vez de escribir la sentencia Lcase 30 veces para cada variable, hemos utilizado un arreglo llamado nombres con un número de índice 30 , es decir que almacena 30 datos de tipo String
1.1 – Declaración de los arreglos en el código
1.2 – Acceder a los datos de un arreglo
Para acceder a los datos de un arreglo o vector, debemos hacerlo mediante el índice o número del elemento del mismo. Por ejemplo:
Dim alumnos(1 To 4) As String

alumnos(1) = «juan»
alumnos(2) = «micaela»
alumnos(3) = «maría»
alumnos(4) = «ignacio»

Primero declaramos un arreglo llamado alumnos, de tipo string y que contendrá 4 elementos. Luego le asignamos un valor de cadena como a cualquier otra variable de tipo string, pero con la diferencia que para referirnos al elemento utilizamos el n° de índice del mismo.
Otro ejemplo
Dim paises(2) As String

‘ Llena el vector con datos
paises(0) = «Argentina»
paises(1) = «Perú»
paises(2) = «Brasil»

‘ Recorre los elementos del vector
For x = 0 To 2

MsgBox «Nombre del país : » & paises(x)

Next x

En este último ejemplo, declaramos y creamos un vector de 3 elementos que contendrá el nombre de 3 países. Luego en un bucle For utilizamos la función MsgBox para mostrar los elementos del arreglo, pasándole como parámetro del índice la variable x del bucle For
¿Qué es una colección?

ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

‘ Cuando pulsamos en un elemento de la lista…

With ListBox1

TextBox1.Text = listbox1.SelectedItem

End With

End Sub

Fíjate que en este caso no es el evento Clic, como era de esperar (y como es en las versiones anteriores de VB) sino que el evento en cuestión es SelectedIndexChanged.
Ya te he comentado que lo que podemos añadir a los elementos del listbox son objetos, pero lo que a nosotros nos interesa mostrar es el «texto» de dicho elemento, ya que no nos interesa otra cosa, más que nada porque lo que hemos añadido son textos y no objetos.
Lo que en este evento hacemos es asignar a la caja de textos el texto del elemento seleccionado: la propiedad SelectedItem representa al elemento seleccionado. Tranquilo lo veremos mas adelante… además ¿qué esto del With… End With? Esto si que lo explico porque es sencillo. Cuando estamos trabajando con varias propiedades de un control u objeto (cuadro de lista en este caso) podemos hacerlo de esta forma:
TextBox1.Text = Listbox1.SelectedItem
Es decir, le indicamos el método o propiedad de control separado por un punto. Pero en ocasiones escribiremos muchas instrucciones sobre ese cuadro de lista… para evitar escribir tantas veces el objeto con el que estamos trabajando podemos utilizar la instrucción with…end with
With ListBox1
TextBox1.Text = .SelectedItem
End With
Que significa: «con el cuadro de lista Listbox1» haz lo siguiente… y cuando se encuentre una propiedad con el punto delante .SelectedItem sabe que debe ser del control que se indicó en el with. Es un poco para simplificar la sintaxis, la utilidad no va mas allá de hacer el código mas legible y puede omitirse tranquilamente su utilización y escribir en su lugar el objeto completo.
Creación de objetos
nombreclase
Aquí, nombrevariable
es el nombre que utilizaremos para referirnos al objeto; sigue las reglas normales de los nombres de Visual Basic. Nombreclase es el nombre de la clase que queremos crear una instancia. Por ejemplo:
Dim MiCadena As MiString
Esta sentencia no crea en realidad una instancia de la clase MiString, sino que sólo crea una variable que puede referirse a una instancia. Para crear el objeto, hay que ejecutar:
Set MiCadena = New MiString
Si utilizamos la palabra reservada opcional New en la sentencia Dim, es innecesario utilizar la sentencia Set. Es decir, el siguiente código:
Dim MiCadena As New MiString
Tiene el mismo efecto que las dos sentencias anteriores:
¿Por qué entonces necesitarnos la sentencia Set? Hay dos casos. Uno es cuando, en lugar de declarar la variable del objeto como un tipo específico, llamado early binding [enlace temprano], usamos la palabra reservada Object y hacemos late binding [enlace tardío]. El enlace tardío requiere declarar la variable del objeto como tipo genérico Object, en lugar de cómo un tipo de clase específico, referenciando luego una clase específica con la palabra reservada Set:


Ejemplo
Debemos crear un sencillo programa de demostración para mostrar la clase MiString.

Deja un comentario