Série de palestras ASP (8) Usando coleções
Autor:Eve Cole
Data da Última Atualização:2009-05-30 19:59:11
A maioria dos objetos internos do ASP oferece suporte a coleções. As coleções são onde strings, números, objetos e outros valores são armazenados. As coleções são muito semelhantes aos arrays, exceto que a coleção se expande e pesquisa automaticamente quando os itens são armazenados ou recuperados. Ao contrário dos arrays, quando uma coleção é modificada, a posição dos itens se move. Os itens podem ser acessados por seu nome, índice ou percorrendo todos os itens da coleção.
Acessando itens por nome e índice Você pode acessar itens específicos em uma coleção usando o nome do item. Por exemplo, a coleção Contents contém todas as variáveis armazenadas no objeto Session. Também possui todos os objetos criados por Server.CreateObject. Suponha que as seguintes informações do usuário estejam armazenadas no objeto Session:
<%
Session.Contents("Nome") = "Sam"
Session.Contents("Sobrenome") = "Uau"
Session.Contents("Idade") = 29
%>
Os itens podem ser acessados usando o nome associado ao item quando ele foi armazenado na coleção. Por exemplo, a expressão a seguir retorna a string "Sam":
<%= Session.Contents("Nome") %>
Os itens também podem ser acessados usando o índice ou número associado ao item. Por exemplo, a expressão a seguir recupera as informações armazenadas no segundo slot de armazenamento do objeto Session e retorna "Woo":
<%= Sessão.Contents(2) %>
As coleções ASP são numeradas começando em 1. Quando itens são adicionados ou removidos da coleção, o índice associado ao item será alterado. Portanto, não se pode presumir que o índice do item permaneça inalterado. Como será explicado nos tópicos a seguir, o acesso por meio de índices geralmente é utilizado para percorrer uma coleção ou para acessar itens em uma coleção somente leitura.
Os projetos são acessados usando seus nomes abreviados. ASP pesquisa as coleções associadas aos objetos em uma ordem específica. Se um item com um nome específico ocorrer apenas uma vez em uma coleção de objetos, você poderá eliminar o nome da coleção:
<%= Sessão("Nome") %>
Ao acessar itens armazenados em objetos Aplicativo ou Sessão, geralmente é seguro eliminar o nome da coleção. Entretanto, para objetos Request, é melhor especificar o nome da coleção porque é provável que a coleção contenha nomes duplicados.
Percorrendo uma coleção Percorra todos os itens de uma coleção para aprender sobre os itens armazenados na coleção ou para modificar itens. Ao percorrer uma coleção, um nome de coleção deve ser fornecido. Por exemplo, você pode usar a instrução For...Each em VBScript para acessar itens armazenados em um objeto Session:
<%
'Declara uma variável contadora.
Escurecer item
'Para cada item da coleção, exiba seu valor.
Para cada item em Session.Contents
Response.Write Session.Contents(Item) & "<BR>"
Próximo
%>
Você pode usar a instrução For...Next em VBScript para iterar por uma coleção. Por exemplo, para listar os três itens armazenados na Sessão do exemplo acima, você usaria a seguinte instrução.
<%
'Declara uma variável contadora.
Escurecer item
'Repita o loop até que o valor do contador seja igual a 3.
Para item = 1 a 3
Response.Write Session.Contents(Item) & "<BR>"
Próximo
%>
Como o número de itens armazenados em uma coleção geralmente não é conhecido, o ASP oferece suporte à propriedade Count das coleções, que retorna o número de itens na coleção. Você pode usar a propriedade Count para especificar o valor final do contador.
<%
'Declara uma variável contadora.
Escurecer item
'Repita este loop até que o contador seja igual ao número de itens
'na coleção.
Para Item = 1 para Session.Contents.Count
Response.Write Session.Contents(Item) & "<BR>"
Próximo
%>
Você pode usar a instrução for em um script para percorrer uma coleção. Ao usar a propriedade Count em uma instrução JScript for, para obter melhores resultados, você deve atribuir o valor Count a uma variável local e usar essa variável para definir o valor final do contador. Dessa forma, o mecanismo de script não precisa procurar o valor de Count toda vez que faz um loop. O exemplo a seguir demonstra esta técnica:
<%
var item, numitems;
numitems = Session.Contents.Count;
for (item = 1; item <= numitems; item++) {
Response.Write(Session.Contents(item) + "<BR>")
}
%>
O Microsoft JScript 3.0 introduziu o objeto Enumerador. Você pode usar esse objeto para percorrer coleções ASP. O método atEnd indica se ainda existem itens na coleção. O método moveNext move para o próximo item da coleção.
<%
// Cria um objeto Enumerador
var mycoll = novo Enumerador(Session.Contents);
//Iterar pela coleção e exibir cada item
enquanto (!mycoll.atEnd()) {
var x = mycoll.item();
Response.Write(Session.Contents(x) + "<BR>");
mycoll.moveNext();
}
%>
O script que itera por meio de uma coleção de subchaves incorpora valores relevantes em um único cookie para reduzir o número de cookies enviados entre o navegador e o servidor Web. Portanto a coleção Cookies dos objetos Request e Response pode ter vários valores em um único item. Esses subitens ou subpalavras-chave podem ser acessados individualmente. Somente as coleções Request.Cookies e Response.Cookies suportam subchaves (Subchaves). Request.Cookies oferece suporte apenas a operações de leitura; Response.Cookies oferece suporte apenas a operações de gravação.
Você pode enumerar todos os cookies na coleção Request.Cookie e todas as subchaves (Subkeys) no Cookie. No entanto, iterar subchaves em um cookie sem subchaves não produzirá resultados. Você pode evitar isso usando a sintaxe .HasKeys para primeiro verificar se o cookie contém subchaves. O exemplo abaixo demonstra esta técnica.
<%
'Declara variáveis de contador
Dim Cookie, Subchave
'Exibe toda a coleção de cookies.
Para cada cookie em Request.Cookies
Resposta.Escrever Cookie & "<BR>"
Se Request.Cookies(Cookie).HasKeys Então
'Mostra as subchaves
Para cada subchave em Request.Cookies(Cookie)
Response.Write Subkey & "=" & Request.Cookies(Cookie)(Subkey) & "<BR>"
Próximo
Outro
Response.Write "Não há subchaves neste cookie <BR>"
Terminar se
Próximo
%>
Iterar sobre uma coleção de objetos
As coleções de sessões e aplicativos podem conter variáveis quantitativas ou instâncias de objetos. A coleção Contents contém variáveis de quantidade e instâncias de objetos geradas pela chamada de Server.CreateObject. A coleção StaticObjects contém objetos criados usando o elemento HTML <OBJECT> no arquivo Global.asa.
Ao iterar sobre uma coleção que contém um objeto, você pode acessar o identificador do objeto ou os métodos e propriedades do objeto. Por exemplo, suponha que seu aplicativo use vários objetos para criar contas de usuário e cada objeto tenha um método de inicialização. Você pode iterar na coleção StaticObjects para chamar cada método de inicialização:
<%
Para cada objeto em Session.StaticObjects
Sessão.StaticObjects(Objeto).InitializeUser
Próximo
%>
Como as coleções ASP são diferentes?
Embora as coleções ASP discutidas neste tópico sejam muito semelhantes aos objetos Collection do Visual Basic, existem algumas diferenças. As coleções ASP suportam a propriedade Count e o método Item, mas não os métodos Add e Remove.