Expressões de
mensagem
Uma expressão de mensagem representa o envio de uma
solicitação a um objeto receptor para realizar uma determinada
operação. A cada expressão de mensagem corresponde uma
resposta do receptor.
As expressões de mensagem em Smalltalk equivalem à chamada
de procedimento ou função em linguagens convencionais, onde
o receptor é um parâmetro privilegiado. O seletor da
expressão especifica qual a operação a ser realizada
e permite localizar o método que implementa a operação.
Uma expressão de mensagem pode conter zero ou mais argumentos. A sintaxe
de uma expressão de mensagem é
-
<receptor> <mensagem>
Existem 3 tipos básicos de expressão de mensagem, a saber,
unárias, binárias e mensagens com
palavras-chave.
-
Mensagens unárias: não contém argumentos, e são
formadas apenas pelo seletor. Por exemplo:
beta sin mensagem sin enviada a um número referenciado pela
variável beta. Responde com o valor do seno do ângulo
em radianos representado pelo valor de beta.
3 factorial mensagem factorial enviada ao número 3. Responde
com o fatorial de 3 (número 6).
-
Mensagens binárias: são mensagens com apenas um argumento,
nas quais o seletor é representado por um ou dois caracteres não
alfa-numéricos. Equivalem às expressões com operadores
nas linguagens convencionais. São usadas em operações
aritméticas e relacionais, como nos exemplos abaixo:
3 + 2 O receptor é o número 3, o seletor é + e o argumento
da mensagem é o número 2. Responde com o objeto 5.
indice <= 2 O receptor é o objeto referenciado pela variável
indice, o seletor é <= , e o argumento é o número
2. Responde o objeto true ou o objeto false.
-
Mensagens com palavras-chave: ("keyword messages") - são mensagens
com um ou mais argumentos, onde o seletor é representado por uma
sequência de uma ou mais palavras-chave, cada uma precedendo um dos
argumentos. Cada palavra-chave é, nesse caso, um identificador seguido
do caractere ":". Por exemplo:
Array new: 3 O receptor é a classe Array, o seletor é new:
(uma palavra-chave), e o argumento é 3. Responde com uma nova
instância de Array com 3 elementos, inicialmente nulos.
list at: 1 put: 'um' O receptor é o objeto referenciado pela
variável list, o seletor é at:put: (duas palavras-chave), e
os dois argumentos são 1 e 'um'. Faz o primeiro elemento de list
referenciar a cadeia 'um', e retorna uma referência a list.
Por meio de prefixos de atribuição é possível
associar o objeto resultado da expressão a uma variável , como
na expressão abaixo:
-
list := Array new: 3
Nesse caso, após a criação da instância de Array,
a variável list passará a referenciá-la.
Conhecidas os diferentes tipos de expressões,
cabe agora ver o mecanismo de "parsing "das expressões de mensagem,
ou seja, as regras de
precedência.