Für Programmierer
Diese Seite ist für alle Leser mit Programmier-Erfahrung und soll einen schnellen Überblick über die Sprache vermitteln.
Wichtig zu verstehen ist, dass es in JayMo nur Objekte gibt, welche Funktionen, Ereignissen, Eigenschaften und Konstanten besitzen. Vermeintliche "Schlüsselwörter" wie "If" oder "For" sind somit ebenso "nur" Objekte, wenn auch mit besonderen Fähigkeiten (Steuer-Objekte).
JayMo wird relativ schlank geschrieben, weshalb geschweifte Klammern für Blöcke und ein Semikolon als Zeilenabschluss entfallen.
Die Datei-Endung für JayMo-Dateien ist: ".jmo"
Wichtige Atomare Typen
Art | Typ | Schreibweise |
---|---|---|
Wahr-Werte | Bool |
|
Ganzzahlen | Int |
|
Dezimalzahlen | Dec |
|
Zeichen | Char |
|
Text | Str |
|
Nichts | Nil |
|
Kommentare
Art | Schreibweise |
---|---|
Zeile |
|
Block |
|
Alles nachfolgende |
|
Variablen
Variablen |
|
Konstanten |
|
Eine Variable merkt sich den ersten zugewiesenen Typ.
Typ-Angaben sind optional möglich:
Int abcDef = 12 + 34
Objekt erzeugen
Ein neues Objekt wird von einem Typ instanziiert, in dem der Typ-Name ausgeschrieben wird:
Random
Eine von einem Typ abgeleitete Objekt-Instanz wird in dieser Dokumentation vereinfacht als Objekt bezeichnet.
Funktionen
Mathematische | Alphanumerische | |
---|---|---|
Punkt | entfällt | wird benötigt |
Prioritäten | Unterschiedlich | Immer höchste Priorität |
Beispiel |
|
|
Befehlsketten
Als Ausgangsbasis dient immer ein Objekt. Funktionen können aneinander gereiht werden:
123.echo.echo.echo.print
Gruppieren mit Klammern:
(( 2 + 3 ) * 4 ).print
Mehrere Befehle in einer Zeile werden mit einem Semikolon getrennt:
3.print; 9.print
Standard-Ausgabe
Für die Ausgabe zu StdOut existieren mehrere Möglichkeiten:
Zeilenumbruch | JayMo-Classic | JayMo-Flow |
---|---|---|
nein |
|
|
ja |
|
|
Offenes Argument
Folgt nach dem Typnamen ein Leerzeichen, so wird alles Nachfolgende als einzelnes Argument beim Erzeugen übergeben.
Somit sind folgende zwei Versionen möglich und identisch:
Print "foo"
Print( "foo" )
Für Argumente oder bei einem nachfolgenden Block müssen Klammern verwendet werden.
Blöcke & Stream
Ein Block wird mit einem Tabulator eingerückt und so der vorherigen Funktion oder dem vorherigen Objekt zugeordnet.
Als "Stream" werden angehängte Funktionen bezeichnet. Diese können sich auch unterhalb, jedoch auf der selben Ebene, befinden.
Hier bei "If" werden Block und Stream verwendet:
If( a > 3)
Print "abc"
.else
Print "def"
Eigene Funktionen
Definitionen werden immer mit zwei Doppelpunkten eingeleitet.
Typ-Angaben sind optional, können aber erzwungen werden.
Definition ohne Parameter:
::myFunc
Print 123
Definition einzeilig mit zwei Parametern:
::mySum( a, b ) = a + b
Definition mit Typen, Vorgabe-Werten und variabler Argument-Anzahl
::myTest( Int a = 12, Int b = 34, Char c... )
Str s = "" + (a+b)
Each( c )
s += it
Return s
Aufruf:
this.myFunc
this.mySum( 123, 345 )
this.myTest
this.myTest(56)
this.myTest(56, 78)
this.myTest(56, 78, 'h', 'e', 'l', 'l', 'o')
Eigene Typen
Objekt-Typen (Klassen) bilden den "Bauplan" für Objekt-Instanzen (Objekte).
Die Parameter werden identisch zu Funktionen definiert.
Definition:
::MyType( Bool b )
::show
Print b
Erzeugen und eine Objekt-Funktion aufrufen:
MyType( true ).show