La forma de implementar métodos de un objeto es la expresión. Ésta es evaluada al invocar dicho método. Cuando se define un atributo de forma Expression en el editor de atributos, para una clase derivada por el usuario, se declara su tipo de valor y los posibles parámetros de entrada. Ambas propiedades son las mismas para todas las instancias de esa clase pero la implementación de la expresión puede variar con cada objeto concreto. Es posible fijar esta implementación para todas las instancias utilizando un objeto prototipo y marcando el atributo como no editable en el editor de clase derivada.
Además de los parámetros, una expresión puede tener algunas variables locales que sólo existen durante la evaluación de la expresión. Estas variables locales se pueden definir mediante el editor de expresiones o en forma textual. Así mismo, la expresión puede ser completamente definida en forma textual o mediante el editor de expresiones.
Todos los tipos de valor tienen un valor nulo, que es el adquirido por defecto cuando no se ha definido o no puede calcularse por alguna razón.
Cuando la expresión no ha sido editada consta de un término literal de valor nulo o de ningún término si es de tipo void.
Los tipos de valor que pueden usarse en una expresión son:
Los espacios, tabuladores y saltos de línea no son significativos y actúan como separadores de los elementos léxicos.
Los nombres más restrictivos son los de las variables y los parámetros. Estos deben de empezar por un carácter alfabético (a-zA-Z) o subrayado (_) y pueden contener además dígitos (0-9). Ejemplos:
accc, val22
Los nombres de funciones, atributos y métodos no pueden contener espacios, tabuladores ni saltos de línea o alguno de los caracteres reservados ("$|#:@&,\%{}()[]).
prota, _PI/2
Los nombres de objetos o clases pueden tener cualquier carácter pero si no siguen la norma anterior deben de estar encerrados entre { }. Si se quiere incluir alguno de estos caracteres en el nombre debe de anteponerse el carácter \ . Si se desea incluir este carácter se le antepone otro \ .
Los siguiente nombres están reservados:
THIS true false
Una expresión consta de un único término que puede ser simple o una composición de otros expresada con una determinada sintaxis. Puede estar precedida por la declaración de las variables locales usadas en la expresión.
El valor de un término puede ser persistente o temporal. En el primer caso es válido fuera de la expresión que lo usa, está almacenado en alguna variable o atributo de objeto. Una expresión puede modificarlo mediante una operación de asignación. En el segundo caso son valores intermedios que desaparecen después de usarlos.
Cada tipo de valor tiene una forma propia de representación literal.
true, false
0, 23, -12345
123, -12.56, 1e5, 23e-1
"hola, mundo"
[0, 0] [2.1, 55] [1,1,1,1] [0,-1,0]
[1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
[ iiff 1 2 3.2 4.5 6 7 8.0 10.0 ]
@prota#Actor, &101250
[#Character @prota, @enemigo1, &1792852]
El tipo de dato del literal determina la forma de edición en el editor de expresiones. Por ejemplo, para un entero o float nos presenta un editor simple de texto con el indicador i o f a la derecha de la caja de edición. Si el valor es el de un color o un ángulo preferiremos tener una forma de edición especializada en estas clases de magnitudes. Para ello se pueden adornar los literales precediéndoles con un nombre precedido a su vez por el carácter :. Existen los siguiente tipos de adornos:
Las variable locales y los parámetros de entrada se representan anteponiéndoles el carácter $. Ejemplos:
$accum $v $z
Los parámetros de entrada de los atributos de usuario de tipo Expression se definen en el editor de atributos. Las variables locales se pueden definir en el editor de expresiones o en forma textual mediante una lista de declaraciones encerradas ente || que preceden al término que constituye la expresión. Ejemplo:
|a int, b float, x Picture|...
Con la misma forma sintáctica se expresan la invocación de funcion o método o la referencia a constantes, variables globales o atributos de un objeto.