2.2 Definiciones de envío de mensajes

Hay tres tipos de mensajes en Cuis-Smalltalk:

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.