Expressões de Bloco

Um Bloco é um objeto formado por uma sequência de expressões separadas por um ponto, e delimitada por um par de colchetes. Por exemplo:

[indice := indice + 1.
lista at: indice put: 'vermelho']

Como objeto, um bloco pode ser referenciado por variáveis, e pode reagir a mensagens específicas. A expressão

x := [indice := indice + 1.
lista at: indice put: 'vermelho']

faz a variável x referenciar o bloco acima.

Um bloco ativa as expressões em seu interior ao receber a mensagem unária value. Por exemplo, após a atribuição acima, a expressão

x value

terá como efeito a execução das expressões do bloco.

Como outro exemplo, se E é uma expressão qualquer, então as expressões E e [E] value são equivalentes.

Quando um bloco recebe a mensagem value, o valor resultante, ou resposta, é o resultado da última expressão da sequência que compõe o bloco.

Bloco vazio: o resultado do envio da mensagem value a um bloco vazio é nil, ou seja, [ ] value tem o valor nil.

Argumentos de blocos: blocos podem ter argumentos, que funcionam como variáveis locais. A forma de um bloco com argumentos é o seguinte:

[:v1 :v2 .... :vn| sequência de expressões]

onde v1, v2, ....,vn são nomes de argumentos locais do bloco. Blocos com argumentos são usados em estruturas de controle que realizam iterações sobre coleções de objetos, e são examinados no capítulo na seção sobre Coleções.