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.

Vamos abordar os principais:

  • do
  • collect
  • select
  • reject
  • detect

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:

Note o uso da mensagem binária >>> para indicar o resultado de uma expressão. É uma forma alternativa usada para isso em vez de usar Print it. A execução de >>> retorna uma Association. A única coisa que precisa saber agora sobre uma Association é que ela é composta de uma key e um value.
Alguns exemplos:
A expressão 5 factorial >>> 120 retorna uma Associaton 120 -> 120 onde key vale 120 e value vale 120.
A expressão 9 sqrt >>> 2 retorna uma Associaton 3 -> 2 onde key vale 3 e value vale 2.
A expressão (42 >>> 'The Answer') >>> (42 -> 'The Answer') auto-descreve >>>.

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.

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.

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.

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.

Encerrando a sessão

Encerre salvando a imagem.



Report Page