Framework ofrece clases especializadas para almacenamiento y recuperación de datos. Estas clases proporcionan compatibilidad con estructuras tipo Pilas, Colas, Listas y Tablas Hash, Para realizar un recorrido por los elementos de una colección se puede usar la estructura repetitiva For Each…Next
En la Figura se ilustra la forma en que operan las colecciones de tipo Cola (First InPut First OutPut), Pila (Last InPut First OutPut) y la lista enlazada que más adelante veremos desarrollados en casos prácticos.
INSTRUCCIÓN FOR EACH. NEXT
La estructura repetitiva For Each será la encargada de recorrer por las colecciones ya que su estructura así lo permite, su misión es repetir un grupo de instrucciones por cada elemento de una determinada colección.
Sintaxis:
Donde:
- ELEMENTO: asume los ciclos de repetición dentro de una colección, obteniendo diferentes valores según el contenido de una colección. No es obligatorio especificarlos en la cláusula NEXT.
- COLECCIÓN: Es el nombre de la colección de elementos registrados antes de emplear un For Each.
- EXIT FOR: Son opciones y permite salir del ciclo de repeticiones que pueda ocasionar el For Each.
Consideraciones:
Cuando comienza la ejecución del ciclo For Each…Next, Basic comprueba que se hace referencia a un objeto de colección válido. Caso contrario produciría una excepción. Si todo es correcto llama al método MoveNext y a la propiedad Current del objeto enumerador para devolver el primer elemento. Si MoveNext indica que no hay un elemento siguiente, es decir, si la colección está vacía, el bucle For Each termina y el control pasa a la instrucción que sigue a Next. De lo contrario, Visual Basic establece element en el primer elemento y ejecuta el bloque de instrucciones.
- Este proceso continuo hasta que MoveNext indica que no hay ningún elemento siguiente o se encuentra una instrucción Exit For
- Cuando se ejecuta un bucle For Each…Next, el recorrido de la colección esta bajo el control del objeto enumerador devuelto por el método GetEnumerator. El orden de recorrido no lo determina Visual Basic, sino el método MoveNext del objeto enumerador. Esto significa que tal vez no se puede predecir qué elemento de la colección es el primero que se devuelve.
- Si el código utilizado depende del recorrido de una colección en un orden concreto, un bucle For Each…Next no es la mejor opción a menos que conozca las características del Objeto enumerado que expone la colección. Seria recomendado que use For…Next o Do…Loop.
- Cuando se recorre una matriz; se cuenta con la clase Array que implementa la interfaz IEnumerable todas las matrices exponen el método GetEnumerator. Esto significa que es posible recorrer un matriz con un bucle For Each…Next pero solo podrá leer los elementos de la matriz, por ningún motivo podrá modificarlos.
CASO DESARROLLADO:
Implemente una aplicacion que permita llenar una colección de 5 elementos de tipo Cadena y luego lo muestra en una lista. Use la clase Collection y For Each.
Tener en cuenta:
- Para mostrar la colección primero debe crearla y agregarle los elementos a contener en este caso Programación – Orientada a – Objetos con – Visual Basic cada uno en una variable de tipo cadena distinta, todo esto se realizara con el botón CREAR COLECCION al terminar de crear la colección de mostrar el mensaje como en la Figura Inferior.
Luego se deberá mostrar los elementos de la colección or medio del botón MOSTRAR COLECCION, considere que para recorrer los elementos debe usar For Each y que si no existe la colección le muestre un mensaje de “La colección esta vacía” como lo muestra la Figura.
- Implemente un botón que permita dejar vacía la colección.
Solución:
1.Archivo>Nuevo Proyecto
Seleccione Visual Basic desde los elementos de la plantilla, asegúrese que trabaje con .NET Framework , seguidamente seleccione Aplicación de Windows Forms y finalmente asígnele un nombre adecuado en este caso pjColecciones.
2. Ahora diseñe el siguiente formulario, recuerde que en esta etapa todavía no se le asigné los nombres a los objetos.
3. Ahora procedemos a asignar las propiedades a los objetos contenidos dentro del Formulario
Form1(Archivo) | (Name) frmColeccion1 |
Form1(Objeto) | Text Colección Size 195,346 |
Button1 | (Name) btnCrear Text CREAR COLECCIÓN |
Button2 | (Name) btnMostrar Text MOSTRAR COLECCIÓN |
Button3 | (Name) btnVaciar Text VACIAR COLECCIÓN |
Button4 | (Name) btnSalir Text SALIR |
ListBox1 | (Name) lstC |
4. Finalmente implementaremos el código de la aplicación:
Explicación:
En el punto uno se declara el objeto miColeccion de tipo Collection, hay que tener en cuenta que solo se encuentra declarado, aun no tiene valores.
En el punto dos se declaran 5 variables de tipo String, los cuales tendrán valores distintos que luego se enviarán al objeto de colección miColeccion.
En el punto tres se envían los valores asignados a las variables al objeto miColeccion por medio de la propiedad add que es la encargada de agregar un elemento a la colección. Y el punto cuatro confirma el envió por medio de un mensaje de confirmación.
En el punto cinco se verifica que la colección por lo menos tenga un valor que mostrar para eso se usa la propiedad Count que es la encargada de determinar el número de elementos contenidos en la colección. Al condicionar que dicho valor sea menor a 1 estamos verificando que no tiene elementos y se mostraré el mensaje “La colección esta vacía”.
En el punto seis se recorre por los elementos de la colección miColeccion usando la estructura repetitiva For Each donde la variable miCadena es la encargada de recepcionar valor por valor desde la colección y este a su vez se imprimirá dentro del objeto ListBox.
Observe que podríamos realizar una modificación al For Each con respecte a la colección agregando el tipo de datos, en este caso agregamos el String y el resultado es el mismo.
En el punto siete se eliminan los elementos de la colección miColeccion por medio de la propiedad Clear, finalmente se muestra el mensaje de “Colección Libre”.
Finalmente, en el punto ocho se captura la opción de salida que el usuario pueda seleccionar desde el cuadro de mensaje mostrado, al seleccionar el botón SI o NO se evalúa la condición y lo expulsa de la aplicación según lo seleccionado, recuerde que el numero 6 es asignado al VBYES y 7 al VBNO.