Stream

Stream (literalmente "fluxo" ou "corrente") é uma classe que implementa o protocolo para realizar o acesso sequencial aos elementos de coleções indexadas, tais como Arrays, Strings e OrderedCollections.

Cada instância de Stream contém 3 componentes principais:

  1. Uma referência à coleção que a Stream acessa.
  2. Um marcador da última posição acessada na coleção.
  3. Um contador com o número de elementos da coleção.

Na ilustração abaixo, é mostrada uma Stream s, que acessa um Array a de 6 elementos. O marcador de posição indica que a última posição acessada foi a de número 4:

Streams são úteis para implementar algorítmos que percorrem coleções sequenciais. A classe Stream é, na realidade, uma classe abstrata, pois são as suas sub-classes, abaixo descritas, que possuem instâncias diretamente:.

Streams são usadas em todos os métodos que implelmentam acessos de leitura e/ou gravação em qualquer coleção indexável de objetos. Uma mesma coleção pode ter várias Streams a ela associadas. Streams podem ser criadas através da mensagem abaixo enviada à sub-classe desejada:

on: umaColeçãoIndexada

Por exemplo, uma ReadStream s como a da figura acima poderia ser criada executando a expressão abaixo:

s := ReadStream on: #(5 4 20 1 7 12)

O marcador de posição, neste caso, é inicializado com valor zero.