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:
keyStroke:) y cualquier argumento. Aquí, event es
un KeyboardEvent,
key),
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.