Collection
A classe Collection contém o protocolo comum a todos os objetos que representam grupos ou coleções de objetos. Todas as estruturas de dados básicas são instâncias de alguma classe descendente de Collection. A hierarquia da classe Collection em Smalltalk-80 é apresentada abaixo em comparação com a de Smalltalk/Vonde podem ser notadas algumas diferenças.
| Smalltalk-80 | Smalltalk/V |
|
O protocolo de Collection inclui diversas mensagens, que são em geral
implementadas de forma diversa em cada subclasse. Seguem alguns exemplos
de várias categorias de mensagens. Veja também, um
exemplo de aplicação.
Verificar o conteúdo de uma coleção:
Converter uma variedade de coleção em outra, desde que
compatível:
asSet responde com uma instância de Set contendo os mesmos elementos do receptor, com as duplicações removidas.
asSortedCollection responde com uma instância de SortedCollection, contendo os elementos do receptor ordenados de forma ascendente.
Esse protocolo permite realizar processamentos específicos com cada elemento do receptor. As mensagens abaixo implementam os iteradores principais em Smalltalk. O argumento é sempre um bloco de expressões que deve conter uma variável temporária que assumirá sucessivamente os valores dos elementos da coleção do receptor a cada iteração.
do: umBloco executa as expressões do argumento para cada um dos elementos do receptor.
select: umBloco seleciona os elementos do receptor que satisfazem uma condição expressa pelo argumento. Retorna uma nova coleção, semelhante à do receptor, contendo os elementos do receptor para os quais o argumento retorna o valor lógico true.
reject: umBloco idem, para os elementos do receptor para os quais o argumento retorna o valor lógico false.
collect: umBloco executa as expressões do bloco argumento para cada um dos elementos do receptor. Responde com uma nova coleção, semelhante à do receptor, contendo os objetos retornados pelo bloco a cada iteração.
detect: umBloco responde com o primeiro elemento do receptor para o qual o bloco argumento retorna true. Caso não exista nenhum, responde uma mensagem de erro.