0%
Pular para o conteúdo principal
0%

3.5 Streams

Ganhamos um bom entendimento da atribuição como uma ferramenta na modelagem, assim como uma apreciação dos problemas complexos que a atribuição levanta. É hora de perguntar se poderíamos ter abordado as coisas de uma maneira diferente, de modo a evitar alguns desses problemas. Nesta seção, exploramos uma abordagem alternativa para modelar estado, baseada em estruturas de dados chamadas streams. Como veremos, streams podem mitigar parte da complexidade de modelar estado.

Vamos recuar e revisar de onde vem essa complexidade. Em uma tentativa de modelar fenômenos do mundo real, tomamos algumas decisões aparentemente razoáveis: Modelamos objetos do mundo real com estado local por meio de objetos computacionais com variáveis locais. Identificamos a variação temporal no mundo real com a variação temporal no computador. Implementamos a variação temporal dos estados dos objetos do modelo no computador com atribuições às variáveis locais dos objetos do modelo.

Existe outra abordagem? Podemos evitar identificar o tempo no computador com o tempo no mundo modelado? Devemos fazer o modelo mudar com o tempo para modelar fenômenos em um mundo em mudança? Pense sobre a questão em termos de funções matemáticas. Podemos descrever o comportamento variante no tempo de uma quantidade xx como uma função do tempo x(t)x(t). Se nos concentrarmos em xx instante por instante, pensamos nela como uma quantidade em mudança. No entanto, se nos concentrarmos em toda a história temporal de valores, não enfatizamos a mudança—a função em si não muda.1

Se o tempo é medido em passos discretos, então podemos modelar uma função temporal como uma sequência (possivelmente infinita). Nesta seção, veremos como modelar mudança em termos de sequências que representam as histórias temporais dos sistemas sendo modelados. Para fazer isso, introduzimos novas estruturas de dados chamadas streams. De um ponto de vista abstrato, um stream é simplesmente uma sequência. No entanto, descobriremos que a implementação direta de streams como listas (como na seção 2.2.1) não revela completamente o poder do processamento de streams. Como alternativa, introduzimos a técnica de avaliação atrasada, que nos permite representar sequências muito grandes (até infinitas) como streams.

O processamento de streams nos permite modelar sistemas que têm estado sem nunca usar atribuição ou dados mutáveis. Isso tem implicações importantes, tanto teóricas quanto práticas, porque podemos construir modelos que evitam as desvantagens inerentes à introdução da atribuição. Por outro lado, o framework de streams levanta dificuldades próprias, e a questão de qual técnica de modelagem leva a sistemas mais modulares e mais facilmente mantidos permanece em aberto.

Footnotes

  1. Os físicos às vezes adotam essa visão introduzindo as "linhas de mundo" das partículas como um dispositivo para raciocinar sobre movimento. Também já mencionamos (seção 2.2.3) que esta é a maneira natural de pensar sobre sistemas de processamento de sinais. Exploraremos aplicações de streams ao processamento de sinais na seção 3.5.3.