Hay tres tipos de mensajes en Cuis-Smalltalk:
1 factorial el mensaje #factorial se envía al objeto
1.
1 + 2 el mensaje #+ se envía al objeto
1 con el argumento 2.
2 raisedTo: 6 modulo: 10 el mensaje consistente en el
selector de mensaje #raisedTo:modulo: y los argumentos
6 y 10 se envía al objeto 2.
Los selectores de mensaje unitarios se forman con caracteres alfanuméricos y comienzan con una letra minúscula.
Los selectores de mensaje binarios consisten en uno o más caracteres de la siguiente lista:
+ - / \ * ~ < > = @ % | & ? ,
Los selectores de mensajes de palabra clave consisten en series de palabras clave alfanuméricas, donde cada clave comienza con una letra minúscula y termina con dos puntos.
Los mensajes unitarios tienen la mayor precedencia, seguidos de los mensajes binarios y por último los mensajes de palabra clave, así:
2 raisedTo: 1 + 3 factorial ⇒ 128
Primero se envía factorial a 3, después de envía
+ 6 a 1, y finalmente se envía
raisedTo: 7 a 2.
Dejando a un lado la precedencia, la evaluación se realiza estrictamente de izquierda a derecha, por lo que
1 + 2 * 3 ⇒ 9
no es 7. Se deben utilizar paréntesis para alterar el orden de evaluación:
1 + (2 * 3) ⇒ 7
Los paréntesis también se pueden utilizar para aclarar código que podría resultar confuso. Por ejemplo, el estricto orden de evaluación de izquierda a derecha puede resultar confuso cuando se aplica a expresiones matemáticas. En el fragmento de código de Spacewar! que se muestra a continuación, los paréntesis aclaran que la suma se realiza primero:
newVelocity := (ai + ag) * t + velocity
Ejemplo 2.3: Velocidad de la nave
Para enviar varios mensajes al mismo destinatario, se puede utilizar una cascada para indicar el destinatario una vez, seguido de la cascada de mensajes separados por punto y coma. Aquí está nuestro código anterior del Ejemplo 1.2 expresado con una cascada:
Transcript show: 'Hello World!'; newLine; show: 'I am Cuising'
Ejemplo 2.4: Cascada de mensajes
Otro ejemplo de una cascada desde el juego Spacewar!:
aShip velocity: 0 @ 0; morphPosition: randomCoordinate value @ randomCoordinate value
Ejemplo 2.5: Detener y teletransportar una nave espacial a una posición aleatoria
Fíjate que aquí el texto se formatea para facilitar la comprensión del código. Es posible escribir una cascada de mensajes en una sola línea, pero reduce la legibilidad del código:
Transcript show: 'Hello World!'; newLine; show: 'I am Cuising'
La clase Transcript con frecuencia ayuda a presentar información
útil cuando desarrollamos una aplicación. Una alternativa al
Ctrl-d (Do it) es el atajo Ctrl-p
(Print it), que ejecuta el script y muestra el resultado
directamente en el Workspace.
En el Ejemplo 2.4, no hemos solicitado ningún resultado especial. Al
seleccionar el texto y pulsar Ctrl-p, se obtiene el resultado
predeterminado, que es devolver el objeto al que se envía un mensaje, en
este caso, el Transcript.