MAC 441/5714 - Tópicos de Programação Orientada a Objetos

Aula 6 - 27/03/2008

Mais sobre Smalltalk (Repetições e Coleções)

Repetição em um Intervalo

Um exemplinho para recordarmos a Sintaxe de Smalltalk:

| umArray umIndice umValor |
umValor := 2.
umArray := Array new: 10.
1 to: 10 do:
     [:indice | umArray at: indice put: (umValor * indice * indice)].
umIndice := 1.
[umIndice <= umArray size]
   whileTrue:
        [Transcript show: 'O valor na posição: ',
                          (umIndice printString), ' é ',
                          (umArray at: umIndice) printString ; cr.
         umIndice := umIndice + 1.]

Um bom jeito de aprendermos o estilo de programação em Smalltalk é vermos como são implementadas as funções da própria biblioteca. Veja, por exemplo, como é implementado o método Number>>to:do:

to: stop do: aBlock
    "Normally compiled in-line, and therefore not overridable.
    Evaluate aBlock for each element of the interval (self to: stop by: 1)."
    | nextValue |
    nextValue := self.
    [nextValue <= stop]
        whileTrue:
            [aBlock value: nextValue.
            nextValue := nextValue + 1]


Arrays são muito utilizadas para muitas coisas em Smalltalk, por exemplo, para passarmos mais do que 3 argumentos para um bloco:

Exercício

Minha solução do exercício (código-fonte gerado pelo Squeak):

Coleções

Tipos de Coleções

Protocolos Comuns a todas as subclasses de Collection


Bibliografia



Próxima Aula
Aula Anterior
Página de MAC 441/5714
Página do Fabio
Página do DCC