Variablen und Konstanten
Mit Variablen und Konstanten lassen sich Objekte einmerken.
JayMo speichert hier die Referenz zu einem Objekt, jedoch nicht den Wert.
Variablen
Der Name einer Variable kann aus Klein- & Großbuchstaben, sowie Zahlen und dem Unterstrich bestehen. Am Anfang muss allerdings immer ein Kleinbuchstabe stehen.
[a-z][a-zA-Z0-9_]*
Variablen bieten einen flexiblen Speicher, der je nach belieben neu zugewiesen werden kann.
Der erste zugewiesene Typ wird gespeichert, weshalb generell nur noch Objekte des selben Typs zugewiesen werden können.
Zudem ist es generell nicht erlaubt, einer Variable "nil" zuzuweisen.
Wichtig ist auch, dass eine Variable immer initialisiert werden muss. Das Auslesen einer Variable ohne vorheriges Zuweisen, führt zu einem Fehler.
a = 123
Nil
Um auch den Wert "nil" zu erlauben, wird an die Variable ein Fragezeichen "?" angehängt. Generell darf dieses bei der weiteren Verwendung entfallen:
a? = nil
Print a
Konstanten
Der Name einer Konstante kann aus Großbuchstaben, Zahlen und dem Unterstrich bestehen. Am Anfang muss allerdings immer ein Großbuchstabe stehen.
[A-Z][A-Z0-9_]*
Konstanten können nach dem ersten Zuweisen nicht mehr geändert werden.
ABC = "abc"
ABC.print
Generell ist der Wert "nil" für Konstanten nicht zulässig. Mit einem angehängten Fragezeichen wird dies jedoch erlaubt:
XY? = nil
Typsicherheit
Für mehr Typ-Sicherheit kann der Typ einer Variable oder Konstante direkt vorgegeben werden. Hierfür wird bei der Definition der Typ direkt vor die Variable geschrieben.
Int abc = 5
Int FOO = 5
Da Objekte meist von mehreren Typen erben, kann auch ein übergeordneter Typ gewählt werden. So wird ein Bereich an Typen zugelassen:
Atomic a = 123
a = "foo"
a = true
Da jedes Objekt von "Object" erbt, ist es möglich alle Typen außer "nil" zuzulassen:
Object o = 123
Eine Variable die jedes inkl. "nil" speichern kann, wird wie folgt erzeugt:
Object o? = 123
Veränderungen
Das "@varChanged"-Event wird ausgelöst, wenn einer Variable ein neuer Wert zugewiesen wird. Um auf die Variable an sich und nicht den enthaltenen Wert zuzugreifen, wird hierzu das "VarLet" verwendet.
a = 5
:a::@varChanged
"Value has changed to: ".add( it ).print
a = 2
a=++
a.print
Im nachfolgenden Block kann mit "it" auf den neuen Wert zugegriffen werden.