5.3 Sintaxis de método

Mientras que las expresiones pueden evaluarse en cualquier lugar de Cuis-Smalltalk (por ejemplo, en un workspace, en un debugger o en un browser), los métodos se definen normalmente en la ventana System Browser o en el Debugger. Los métodos también pueden archivarse desde un medio externo, pero esta no es la forma habitual de programar en Cuis-Smalltalk.

Los programas se desarrollan método a método, en el contexto de una clase determinada. Una clase se define enviando un mensaje a una clase existente, pidiéndole que cree una subclase, por lo que no se requiere ninguna sintaxis especial para definir clases. Ya estamos familiarizados con esto gracias a los ejemplos anteriores.

Echemos otro vistazo a la sintaxis del método cuando interviene el flujo de control; nuestra primera explicación fue Spacewar! Estados y comportamientos).

He aquí el método keyStroke: en la clase SpaceWar.

SpaceWar>>keyStroke: event
"Check for any keyboard stroke, and take action accordingly"
   | key |
   key := event keyCharacter.
   event isArrowUp ifTrue: [^ ships first push].
   event isArrowRight ifTrue: [^ ships first right].
   event isArrowLeft ifTrue: [^ ships first left].
   event isArrowDown ifTrue: [^ ships first fireTorpedo].
   key = $w ifTrue: [^ ships second push].
   ...

Ejemplo 5.1: SpaceWar! pulsación de tecla (key stroke)

Sintácticamente, un método consta de:

La evaluación de cualquier expresión precedida por un ^ (escrito como ^) hará que el método salga en ese punto, devolviendo el valor de esa expresión. Un método que termina sin devolver explícitamente el valor de alguna expresión siempre devolverá el valor actual de self.

Los argumentos y las variables locales siempre deben comenzar con letras minúsculas. Los nombres que comienzan con letras mayúsculas se consideran variables globales. Los nombres de clases, como Character, por ejemplo, son simplemente variables globales que hacen referencia al objeto que representa esa clase.

Como se puede deducir del Ejemplo 2.2, Smalltalk allClasses size simplemente envía el mensaje #allClasses a un diccionario llamado Smalltalk. Al igual que con cualquier otro objeto, se puede inspeccionar este diccionario. Aquí se puede observar un caso de autorreferencia: el valor de Smalltalk at: #Smalltalk es Smalltalk.