Curso de Visual Basic

Aprende Visual-Basic de una buena vez

gratis
texto

Arrays, arreglos, vectores y matrices en Visual Basic. Uso, declaración y sintaxis en Visual Basic

Los arrays, arreglos o mejor conocidos como vectores (o matrices) que son conocidas por algunos como vectores multidimensionales forman parte también de las cosas que podíamos usar en VB6. Si bien la forma en que se almacenan en la memoria y la forma en que podemos hacer algunas acciones con estas en Visual Basic 2010 ha cambiado un poco, de igual manera la forma en que podemos usarlas es idéntica a VB6... o casi idéntica.

En Visual Basic 2010 la declaración de un array, arreglo o vector la hacemos de la misma forma que en Visual Basic 6 aunque como veremos un poco más adelante algunos detalles cambiaron y es importante tenerlos en cuenta a la hora de declararlos. En el siguiente ejemplo declaramos un array de tipo String llamado nombres:

Dim nombres() As String

Al igual que en VB6, podemos indicar el número de elementos que contendrá el array:

Dim nombres(10) As String

Tal como ocurre en VB6, al realizar esta declaración lo que conseguimos es definir un array de 11 elementos: desde cero hasta 10. Si bien, en VB6 tenemos la posibilidad de indicar cual era el valor del índice inferior predeterminado de los arrays, podemos elegir entre cero y uno mediante la instrucción Option Base indicando a continuación un 0 o un 1. En Visual Basic 2010 no existe esa instrucción, es más en Visual Basic 2010 todos los arrays deben tener como índice inferior el valor cero.

Otra posibilidad que teníamos en VB6 era indicar el rango de índices que podíamos asignar, esto lo lográbamos usando la cláusula To al definir un array, por ejemplo:

Dim nombres(10 To 25) As String

Pero esta declaración es ilegal en Visual Basic 2010, por el hecho de que los arrays de .NET siempre deben tener el valor cero como índice inferior.

Lo que si podemos hacer en Visual Basic 2010 es usar To para indicar el valor máximo del índice, aunque no tiene la misma "potencia" que en VB6, al menos de esta forma el código resultará más legible:

Dim nombres(0 To 10) As String

Declarar e inicializar un array

Lo que no podemos hacer en VB6 era declarar un array y al mismo tiempo asignarle valores.

En Visual Basic 2010 esto lo hacemos indicando los valores a asignar justo después de la declaración y encerrándolos entre llaves:

Dim nombres() As String = {"Pepe", "Juan", "Luisa"}

Con el código anterior estamos creando un array de tipo String con tres valores cuyos índices van de cero a dos.

Si el array es bidimensional (o con más dimensiones), también podemos inicializarlos al declararlo, pero en este caso debemos usar doble juego de llaves:

Dim nombres(,) As String = {{"Juan", "Pepe"}, {"Ana", "Eva"}}

En este código tendríamos un array bidimensional con los siguientes valores:

  • nombres(0,0)= Juan
  • nombres(0,1)= Pepe
  • nombres(1,0)= Ana
  • nombres(1,1)= Eva

Cambiar el tamaño de un array

Para cambiar el tamaño de un array, al igual que en VB6, usaremos la instrucción ReDim, pero a diferencia de VB6 no podemos usar ReDim para definir un array, en Visual Basic 2010 siempre hay que declarar previamente los arrays antes de cambiarles el tamaño.

Lo que también podemos hacer en Visual Basic 2010 es cambiar el tamaño de un array y mantener los valores que tuviera anteriormente, para lograrlo debemos usar ReDim Preserve.

Si bien tanto ReDim como ReDim Preserve se pueden usar en arrays de cualquier número de dimensiones, en los arrays de más de una dimensión solamente podemos cambiar el tamaño de la última dimensión.

Eliminar el contenido de un array

Una vez que hemos declarado un array y le hemos asignado valores, es posible que nos interese eliminar esos valores de la memoria, para lograrlo, podemos hacerlo de tres formas:

Redimensionando el array indicando que tiene cero elementos, aunque en el mejor de los casos, si no estamos trabajando con arrays de más de una dimensión, tendríamos un array de un elemento, ya que, como hemos comentado anteriormente, los arrays de .NET el índice inferior es cero.

Usar la instrucción Erase. Al igual que en VB6, Erase elimina totalmente el array de la memoria.

Asignar un valor Nothing al array. Esto funciona en Visual Basic 2010 pero no en VB6, debido a que en Visual Basic 2010 los arrays son tipos por referencia.

Los arrays son tipos por referencia

Como acabamos de ver, en Visual Basic 2010 los arrays son tipos por referencia, y tal como comentamos anteriormente, los tipos por referencia realmente lo que contienen son una referencia a los datos reales no los datos propiamente dichos.

¿Cuál es el problema?

Veámoslo con un ejemplo y así lo tendremos más claro.

Dim nombres() As String = {"Juan", "Pepe", "Ana", "Eva"} Dim otros() As String otros = nombres nombres(0) = "Antonio"

En este ejemplo definimos el array nombres y le asignamos cuatro valores. A continuación definimos otro array llamado otros y le asignamos lo que tiene nombres. Por último asignamos un nuevo valor al elemento cero del array nombres.

Si mostramos el contenido de ambos arrays nos daremos cuenta de que realmente solo existe una copia de los datos en la memoria, y tanto nombres(0) como otros(0) contienen el nombre "Antonio". En VB6 cada array era independiente del otro y esa asignación a nombres(0) no afectaba al valor contenido en otros(0).

¿Qué ha ocurrido?

Que debido a que los arrays son tipos por referencia, solamente existe una copia de los datos y tanto la variable nombres como la variable otros lo que contienen es una referencia (o puntero) a los datos.

Si realmente queremos tener copias independientes, debemos hacer una copia del array nombres en el array otros, esto es fácil de hacer si usamos el método CopyTo. éste método existe en todos los arrays y nos permite copiar un array en otro empezando por el índice que indiquemos.

El único requisito es que el array de destino debe estar inicializado y tener espacio suficiente para contener los elementos que queremos copiar.

En el siguiente código de ejemplo hacemos una copia del contenido del array nombres en el array otros, de esta forma, el cambio realizado en el elemento cero de nombres no afecta al del array otros.

Dim nombres() As String = {"Juan", "Pepe", "Ana", "Eva"} Dim otros() As String ReDim otros(nombres.Length) nombres.CopyTo(otros, 0) nombres(0) = "Antonio"

Además del método CopyTo, los arrays tienen otros miembros que nos pueden ser de utilidad, como por ejemplo la propiedad Length usada en el ejemplo para saber cuantos elementos tiene el array nombres.

Para averiguar el número de elementos de un array, también podemos usar la función UBound, que es la que nos servía en Visual Basic 6.0 para saber esa información.

Sin embargo, el uso de la función LBound, (que sirve para averiguar el índice inferior de un array), no tiene ningún sentido en Visual Basic 2010, ya que todos los arrays siempre tienen un valor cero como índice inferior.

Para finalizar este tema, solo nos queda por decir, que los arrays de Visual Basic 2010 realmente son tipos de datos derivados de la clase Array y por tanto disponen de todos los miembros definidos en esa clase, aunque de esto hablaremos en la próxima lección, en la que también tendremos la oportunidad de profundizar un poco más en los tipos por referencia y en como podemos definir nuestros propios tipos de datos, tanto por referencia como por valor.

Literales de arrays (o matrices)

Otra característica de Visual Basic 2010 es la aplicación de los denominados literales de arrays o matrices.

La idea es que Visual Basic infiera por nosotros el tipo de dato de forma directa.

Esto representa una buena práctica aunque nos impide hacer cosas que antes podíamos hacer sin complicaciones.

Por ejemplo, pensemos en el siguiente ejemplo de Visual Basic 2008:

Dim ejemploMatriz() = {2009, 2010, 2011, 2012}

En este ejemplo, habremos creado una matriz de 4 elementos. Sin embargo, podríamos cambiar uno de sus elementos a otro valor de diferente tipo, como por ejemplo:

ejemploMatriz(1) = "s"

De esta manera, tendremos un resultado: 2009, "s", 2011, 2012.

Esto es así, porque la matriz ejemploMatriz es de tipo Object.

Sin embargo, esto ha cambiado. Ahora, podemos declarar literales de matrices, haciendo que estas matrices se declaren de acuerdo al tipo de dato declarado, es decir, infiriendo el tipo de dato en la declaración.

Un ejemplo de este uso es el siguiente:

Dim ejemploInteger = {2009, 2010, 2011, 2012}

En este ejemplo, si tratamos de hacer lo que antes intentábamos mediante la siguiente instrucción:

ejemploInteger(1) = "s"

La aplicación nos devolverá un error en tiempo de ejecución, ya que la matriz estará inferida por defecto como tipo Integer, y estaremos intentado asignar un valor String a una matriz de tipo Integer.

Veamos ahora algunos videos explicativos sobre arreglos y matrices.

Muy bien, es todo en este contenido, espero te haya quedado claro, de igual forma si tienes alguna duda que no encuentres solución en ninguna sección, recuerda que siempre puedes usar la sección de comentarios. Recuerda estar atento a nuevas actualizaciones de las diferentes secciones y contenidos que seguiré añadiendo con el tiempo.

La última actualización de este artículo fue hace 3 meses

Imagen descriptiva de JuanDMeGon

Juan David Meza González

JuanDMeGon

Magister, Ingeniero, Desarrollador
Web & Instructor

Lo que dicen los estudiantes

Buena didáctica y redacción, espero más contenidos en los siguientes capítulos.

Juan Razo Ruiz

Estudiante del curso " La Guía del Principiante en Java: Fundamentos y Objetos"

Muy detallado y claras las explicaciones. Muchas gracias!

Sr. Erick Evencio

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Demoramos mucho para llegar al desarrollo. Aunque la maquina virtual es necesaria son muchos videos. De ahí en fuera está muy bien

Benjamin Ortiz

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Wuau, entendí más en una hora leyendo esto que en todo el semestre con la maestra de informática.

Valeria Sybelle

Visitante del sitio ProgramarYa.com

Habiendo visto el 100% del curso puedo decir que es muy bueno de acuerdo a lo propuesto, cumple con las expectativas.

Holmans Correa

Estudiante del curso " La Guía del Principiante en Java: Fundamentos y Objetos"

Muchas gracias me has ayudado a quitar mis dudas de qué es For While, if y switch. Esto me ayudara también a mi tarea.

Len Garcia

Visitante del sitio ProgramarYa.com

Buenas explicaciones y temario interesante.

Leonardo Quimpos

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

Genial el ambiente que genera la pagina. Simple, rápido, fácil y al alcance de cualquiera.¡Sigan así cracks!

Fran Garassi

Visitante del sitio ProgramarYa.com

El curso es bueno, pero siempre explica demasiado rápido

E-Contact

Estudiante del curso " Aprende Laravel: Crea un Gestor de Fotos con Laravel y PHP"

¡De lo mejor! Saludos desde México, está super bien todo, claro y preciso. Lo mejor es que se usen ejemplos. ¡Mejor que algunos profesores que me han tocado!

Rodrigo Enciso

Visitante de PrograarYa.com

Estoy muy contento por haber terminado este curso. Estoy aplicando lo aprendido a mis proyectos y quedo totalmente satisfecho. Un curso 100% recomendable.

Jesus Romero

Estudiante del curso "VPS Seguro con DigitalOcean, Nginx, Letsencrypt Ubuntu 14.04"

Muy buena presentación pedagógica, pues nos quita el miedo a la programación. Yo entiendo que ésta tiene como objetivo facilitar el manejo de procesos que serían, demasiado complejos.

Jairo Ibarbo

Visitante del sitio ProgramarYa.com

Hice muchos ejercicios y aquí logré comprender lo que realmente estaba haciendo. Llegó un momento en que dejó de gustarme la programación, pero con estos textos, recuperé la motivación. Buen trabajo.

Demetrio Cumplido

Visitante del sitio ProgramarYa.com

Muy buen programador, dominas la POO como en ninguno otro curso, el uso de traits en el proyecto es una delicia.

Sergio Larracoechea

Estudiante del curso "APIs RESTful con Laravel"

Estuve un semestre sin programar y me siento bastante perdida. Espero que este curso me ayude a ponerme de nuevo al corriente.

Fernanda Sanchez

Visitante del sitio ProgramarYa.com

Muy bien explicado. Contenido muy actualizado.

Santiago Zuluaga

Estudiante del curso "API RESTful con Laravel: Guía Definitiva"

¡Listo!

En breve recibirás un mensaje de confirmación. Verifica, por si acaso, la carpeta de correo no deseado.

¡Ups! {{subscriberErrorMessage}}

Si te parece bien, te enviaré, de vez en cuando, mensajes de interés sobre los temas que se tratan en sitio.

Tu dirección de correo electrónico será almacenada con un interés según el artículo en el que te encontrabas.

Además, puedes eliminar tu suscripción en cualquier momento.