Iteradores

Iteradores

Doggie Daddy

Índice das lições


Iteradores são mensagens que permitem percorrer coleções de objetos efetuando computações a cada elemento obtido.

Collections

Coleções de objetos podem ser estruturadas de várias formas. Para exemplificar usando iteradores vamos no ater às formas literais dos arrays. Mas o ambiente do Pharo Smalltalk possui muitas outras coleções que podem ser usadas no lugar dos arrays com o mesmo efeito.

Duck typing

Smalltalk é uma linguagem dinâmica que usa duck typesDuck types é um termo que faz alusão à frase: "Se grasna, bota ovo e nada como um pato então é um pato". Diferentemente das linguagens fortemente tipadas os "tipos" no Smalltalk são considerados compatíveis quando um objeto consegue responder a um certo número de mensagens em uso num determinado contexto. Duck typing é importante no funcionamento dos iteradores que, assim, podem servir para iterar sobre vários tipos de coleções desde que implementem algumas mensagens em comum.

Iteradores

Os iteradores são uma espécie de loop confinado a enumerar os elementos de uma coleção.

do

A mensagem do: é enviada a uma coleção e o seu argumento é um bloco. Cada elemento da coleção é passado para o bloco em cada iteração.

Veja o exemplo abaixo:


Iterador do

collect

A mensagem collect: é enviada a uma coleção e o seu argumento é um bloco. Cada elemento da coleção é passado para o bloco em cada iteração. O resultado da computação feita em cada bloco é inserido numa nova coleção que é então retornada.

No exemplo abaixo usamos Inspect it para ver o array resultante:


Iterador collect

select

A mensagem select: é enviada a uma coleção e o seu argumento é um bloco. Cada elemento da coleção é passado para o bloco em cada iteração. O resultado da computação feita em cada bloco deve ser um booleano (true ou false). Os elementos passados aos blocos cujo resultado é true são retornados numa nova coleção. Este iterador atua como um filtro.

No exemplo abaixo usamos Inspect it para ver o array resultante:


Iterador select

reject

A mensagem reject: é enviada a uma coleção e o seu argumento é um bloco. Cada elemento da coleção é passado para o bloco em cada iteração. O resultado da computação feita em cada bloco deve ser um booleano (true ou false). Os elementos passados aos blocos cujo resultado é false são retornados numa nova coleção. Este iterador atua como um filtro de forma complementar ao select. Rejeita o que o select seleciona.

No exemplo abaixo usamos Inspect it para ver o array resultante:


detect

A mensagem detect: é enviada a uma coleção e o seu argumento é um bloco. Cada elemento da coleção é passado para o bloco em cada iteração. O resultado da computação feita em cada bloco deve ser um booleano (true ou false). O elemento passado ao primeiro bloco cujo resultado é true é retornado e a iteração não prossegue. Este iterador atua como uma busca linear pelo primeiro elemento que satisfaça uma condição.

No exemplo abaixo usamos Print it para ver o resultado:


Encerrando a sessão

Encerre salvando a imagem.


Report Page