Serie de conferencias ASP (8) Uso de colecciones
Autor:Eve Cole
Fecha de actualización:2009-05-30 19:59:11
La mayoría de los objetos integrados de ASP admiten colecciones. Las colecciones son donde se almacenan cadenas, números, objetos y otros valores. Las colecciones son muy similares a las matrices, excepto que la colección se expande y busca automáticamente cuando se almacenan o recuperan elementos. A diferencia de las matrices, cuando se modifica una colección, la posición de los elementos se moverá. Se puede acceder a los elementos por su nombre, índice o recorriendo todos los elementos de la colección.
Acceder a elementos por nombre e índice Puede acceder a elementos específicos de una colección utilizando el nombre del elemento. Por ejemplo, la colección Contenido contiene todas las variables almacenadas en el objeto Sesión. También posee todos los objetos creados por Server.CreateObject. Supongamos que la siguiente información de usuario está almacenada en el objeto Sesión:
<%
Session.Contents("Nombre") = "Sam"
Session.Contents("Apellido") = "Woo"
Sesión.Contenido("Edad") = 29
%>
Se puede acceder a los elementos utilizando el nombre asociado con el elemento cuando se almacenó en la colección. Por ejemplo, la siguiente expresión devuelve la cadena "Sam":
<%= Sesión.Contenido("Nombre") %>
También se puede acceder a los artículos utilizando el índice o número asociado con el artículo. Por ejemplo, la siguiente expresión recupera la información almacenada en la segunda ranura de almacenamiento del objeto Sesión y devuelve "Woo":
<%= Sesión.Contenido(2) %>
Las colecciones ASP están numeradas a partir del 1. Cuando se agregan o eliminan elementos de la colección, el índice asociado con el elemento cambiará. Por tanto, no se puede suponer que el índice del artículo permanezca sin cambios. Como se explicará en los temas siguientes, el acceso mediante índices se utiliza generalmente para recorrer una colección o para acceder a elementos de una colección de solo lectura.
Se accede a los proyectos utilizando sus nombres abreviados. ASP busca las colecciones asociadas con objetos en un orden específico. Si un elemento con un nombre específico aparece solo una vez en una colección de objetos, puede eliminar el nombre de la colección:
<%= Sesión("Nombre") %>
Al acceder a elementos almacenados en objetos Aplicación o Sesión, generalmente es seguro eliminar el nombre de la colección. Sin embargo, para los objetos Solicitud, es mejor especificar el nombre de la colección porque es probable que la colección contenga nombres duplicados.
Recorrer una colección Recorrer todos los elementos de una colección para conocer los elementos almacenados en la colección o modificar elementos. Al atravesar una colección, se debe proporcionar un nombre de colección. Por ejemplo, puede utilizar la instrucción For...Each en VBScript para acceder a elementos almacenados en un objeto Session:
<%
'Declarar una variable de contador.
Artículo oscuro
'Para cada elemento de la colección, muestre su valor.
Para cada elemento de la sesión. Contenidos
Respuesta.Escribir sesión.Contenido (elemento) y "<BR>"
Próximo
%>
Puede utilizar la instrucción For...Next en VBScript para recorrer una colección. Por ejemplo, para enumerar los tres elementos almacenados en la sesión en el ejemplo anterior, usaría la siguiente declaración.
<%
'Declarar una variable de contador.
Artículo oscuro
'Repite el ciclo hasta que el valor del contador sea igual a 3.
Para artículo = 1 a 3
Respuesta.Escribir sesión.Contenido (elemento) y "<BR>"
Próximo
%>
Debido a que generalmente no se conoce el número de elementos almacenados en una colección, ASP admite la propiedad Count de las colecciones, que devuelve el número de elementos de la colección. Puede utilizar la propiedad Count para especificar el valor final del contador.
<%
'Declarar una variable de contador.
Artículo oscuro
'Repite este ciclo hasta que el contador sea igual al número de elementos
'en la colección.
Para Artículo = 1 a Session.Contents.Count
Respuesta.Escribir sesión.Contenido (elemento) y "<BR>"
Próximo
%>
Puede utilizar la instrucción for en un script para recorrer una colección. Cuando se utiliza la propiedad Count en una declaración for de JScript, para lograr mejores resultados, debe asignar el valor Count a una variable local y usar esa variable para establecer el valor final del contador. De esta manera, el motor de script no necesita buscar el valor de Count cada vez que realiza un bucle. El siguiente ejemplo demuestra esta técnica:
<%
var elemento, numitems;
numitems = Sesión.Contenido.Cuenta;
for (artículo = 1; artículo <= numitems; artículo++) {
Response.Write(Session.Contents(elemento) + "<BR>")
}
%>
Microsoft JScript 3.0 introdujo el objeto Enumerator. Puede utilizar este objeto para recorrer colecciones ASP. El método atEnd indica si todavía hay elementos en la colección. El método moveNext pasa al siguiente elemento de la colección.
<%
// Crea un objeto enumerador
var mycoll = nuevo enumerador (sesión. contenido);
//Recorre la colección y muestra cada elemento
mientras (!mycoll.atEnd()) {
var x = mycoll.item();
Response.Write(Session.Contents(x) + "<BR>");
mycoll.moveNext();
}
%>
El script que recorre en iteración una colección de subclaves incorpora valores relevantes en una sola cookie para reducir la cantidad de cookies enviadas entre el navegador y el servidor web. Por lo tanto, la colección Cookies de objetos de Solicitud y Respuesta puede tener múltiples valores en un solo elemento. Se puede acceder a estos subelementos o subpalabras clave individualmente. Solo las colecciones Request.Cookies y Response.Cookies admiten subclaves (Subkeys). Request.Cookies solo admite operaciones de lectura; Response.Cookies solo admite operaciones de escritura.
Puede enumerar todas las cookies en la colección Request.Cookie y todas las subclaves (Subclaves) en la Cookie. Sin embargo, iterar sobre subclaves en una cookie sin subclaves no producirá resultados. Puede evitar esto utilizando la sintaxis .HasKeys para comprobar primero si la cookie contiene subclaves. El siguiente ejemplo demuestra esta técnica.
<%
'Declarar variables de contador
Cookie tenue, subclave
'Mostrar toda la colección de cookies.
Para cada cookie en Request.Cookies
Respuesta.Escribir cookie & "<BR>"
Si Request.Cookies(Cookie).HasKeys Entonces
'Mostrar las subclaves
Para cada subclave en Request.Cookies(Cookie)
Respuesta.Escribir subclave & "=" & Request.Cookies(Cookie)(Subclave) & "<BR>"
Próximo
Demás
Response.Write "No hay subclaves en esta cookie <BR>"
Terminar si
Próximo
%>
Iterar sobre una colección de objetos.
Las colecciones de sesiones y aplicaciones pueden contener variables cuantitativas o instancias de objetos. La colección de Contenido contiene variables de cantidad e instancias de objetos generados al llamar a Server.CreateObject. La colección StaticObjects contiene objetos creados utilizando el elemento HTML <OBJECT> en el archivo Global.asa.
Al iterar sobre una colección que contiene un objeto, puede acceder al identificador del objeto o a los métodos y propiedades del objeto. Por ejemplo, suponga que su aplicación utiliza varios objetos para crear cuentas de usuario y cada objeto tiene un método de inicialización. Puede iterar sobre la colección StaticObjects para llamar a cada método de inicialización:
<%
Para cada objeto en Session.StaticObjects
Session.StaticObjects(Objeto).InitializeUser
Próximo
%>
¿En qué se diferencian las colecciones ASP?
Aunque las colecciones ASP analizadas en este tema son muy similares a los objetos Collection de Visual Basic, existen algunas diferencias. Las colecciones ASP admiten la propiedad Count y el método Item, pero no los métodos Add y Remove.