JM° - Referenz

Ausführen 
Interactive Shell
jmo
Programm starten
jmo script.jmo
Aufruf Parameter
The constant ARGS contains a List with the arguments
ARGS.length
ARGS.get(1).print
ARGS[1].print
Regeln 
Zeichensatz
always UTF-8 like Java
Typen
first char is upcase A-Z, then 'A-Za-z0-9_'
CamelCase
Funktionen
first char is lowercase a-z, then 'A-Za-z0-9_'
.mixedCamelCase
Variablen
first char is lowercase a-z, then 'A-Za-z0-9_'
varNr1 = 1
Konstanten
first char only A-Z, then A-Z0-9_
PI = 3.14
Ebenen
Indent through tab
3.times
%.print
Ausdruck-Trenner
newline or ;
newlines not separators inside [], and after ','

"foo".print;"bar".print
Blocktrenner
tabulator
3.times
"Hello!".print
Kommentare
Line comment
# comment
Block comment
/* comment
*S/
Ausgabe
With Newline
"Hello".print
Without Newline
"Hello".echo
Parameterübergabe
Within (), comma separated
"Hello".cut(2,3) cuts from 2, 3 chars = ell
Gruppieren
((5+4)*2).print
Umgebendes Objekt
°.print
Shortcut
°print
Block-Parameter
Grab the Object with the constant IT
3.times
IT.print
Grab the Object with an %
3.times
%.print
Blöcke und Ströme
Every function can have a block and a stream-function
(true).exec #!!!
"Is true".print
.print
Auto-Block-Funktionen
Generally, the Object is passed to the block
5
(%+%).print
Some Types have a auto-function, if an object is called directly with an block
(5==5).if
"Yes".print
A group calles automaticly the if-function/i>
(5==5)
"Yes".print
Priorität
.abc
++ --
* / %
+ -
<< >>
< <= > >=
== !=
&
^
|
Script nicht weiter parsen
#**#
Atomare Typen 
Boolean
Bool
get Object:
true
false
Integer
Int
get Object:
123
Dezimalzahlen
Dec
get Object:
123.45
Zeichenketten
Str
get Object:
"Hello!"
Zeichen
Char
get Object:
'a'
Umwandeln in
.toBool
.toInt
.toDec
.toStr
.toChar
Logik & Wahrwerte 
gleich
true == true
ungleich
true != false
nicht
true!.print
true.not.print
und
(false & true).print
false.and(true).print
oder
(false | true).print
false.or(true).print
entweder oder
(false ^ true).print
false.xor(true).print
nicht und / nand
(false !& true).print
false.nand(true).print
nicht oder / nor
(false !| true).print
false.nor(true).print
nicht xor / xnor
(false !^ true).print
false.xnor(true).print
Relationale Operatoren
== != > < >= <=
Arithmetik 
Plus
5+3
5.add(3)
Minus
5-3
5.sub(3)
Multiplikation
5*3
5.mul(3)
Division
5/3
5.div(3)
Rest
5%3
5.mod(3)
Zu- und Abnahme
x = 1
x++
x--
Kombinierte Zuweisung
x = 1
x += 1
x -= 1
x *= 1
x /= 1
x %= 1
Absoluter Wert
(69/25).abs
Integer Division
(22/7).toInt
Teilen durch 0
raises ZeroDivisionError
Quadrat
2 **
Potenz
2 ** 8
Quadratwurzel
256 //
Logarithmus
256 // 8
Zufall
Random.int
Random.int(1,5)
Bitweise Operatoren
<< >> & | ^ ~
Decimale 
Objekt erzeugen
1.234
Kürzen
5.234.round
5.234.floor
5.234.ceil
5.234.abs
5.234.toInt
Binär / Hex / Octal 
Binär
0b101011.print
Hex
0x3f.print
Oktal
0o37.print
Zeichen 
Groß/klein
'a'.upper.print
'B'.lower.print
'c'.caseUp.print
'D'.caseDown.print
Arithmetik
('a'++).print
('a' + 2).print
Replizieren
('-'*10).print
Zeichenketten 
Objekt erzeugen
"Hello"
Steuerzeichen
 \t \n \" \\
Zusammenführen
"Hello "+"World"
"Hello ".add("World")
Replizieren
"123"*10
"123".mul(10)
Groß/Klein
"Lorem".caseUp
"Lorem".caseDown
Anfangsbuchstabe
"lorem".capital
Trimmen
" Lorem ".trim
Ausrichten
"lorem".alignLeft(10)
"lorem".alignRight(10)
"lorem".alignCenter(10)
Textblock
""""
Textblock
"""".print
Umwandeln
"42".toInt
42.toStr
Schneiden
"Hello".cut(2,3) # ell
"Hello".area(2,3) # el
"Hello".left(2) # He
"Hello".right(3) # llo
"Hello".from(2) # ello
"Hello".to(2) # He
Zeichen
"Lorem"[2] # o
Listen 
Aufzählungen
a = [1, 2, 3, 4]
Größe
a.length
a.len
Durchlaufen
[1,2,3]
%.print
[1,2,3].each.print
Minimum/Maximum
[1,2,3].min
[1,2,3].max
Bereiche 
Zeichen
['a'..'h']
IT.echo
['a'..'z'].set(4,'-').print
Zahlen
[2..9].each.print
Variablen und Ausdrücke 
erzeugen & zuweisen
v = 1
Darf Nil/Null sein
v? = 1
Null
nil
Null-Test
v == nil
v.isNil
Undefinierte Variablen
not allowed
Bedingter Ausdruck
Typsicherheit
A Variable can hold only the first Type
a=2
a='a' Results in an Error
Null
Konstanten 
Definieren
PI=3.14
PI.print
Wenn dann sonst 
wenn dann
We use a Group
(5==5).if.print
(5==5).if
"Yes".print
A Group without a function calls automaticly .if
(true)
"yes".print
sonst
(false)
"Useless line".print
.else
"Yes, it's false".print
Schleifen und Wiederholungen 
Einfaches Zählen
5.times
%.print
{5}
%.print
Zähler
From long to short term
Counter(5,9,2).each.print
{5,9,2}.each.print
{5,9,2}.each
%.print
{5,9,2}
%.print
Von bis
{5,9}
%.print
von bis in Schritten
{5,9,2}
%.print
Nächster
>
Abbruch
>>
Ströme 
Direkter Strom
1.toStr.add("23").print
Prozess
1.toStr.proc
Funktionen 
Definition
:test
"hello".print
Parameterübergabe
:test(a, b, c)
Aufruf
°test
°test(a, b)
Parametervorgaben
:test(a, b=true)
Parameterprüfung
/*=regular expressions
,*/
Funktion verlassen
<<
Or with return-value
<< "Foo"
Typen 
Basisklasse
Object
Methoden überladen
Mehrfache Konstruktoren
Konstruktor-Ketten
Überschreiben
Typ-Informationen
5.type.print
5.types.print
Objekt-Eigenschaften
Events
Änderungsbenachrichtigung
Fehler
Datum und Zeit 
Datum
Date.print
Date("01.01.2019").print
Fehlerbehandlung 
Fehler fangen
°try
5/0
.catch
%.print
or:
5.try
(%/0).print
.catch
%.print
Nebenläufigkeit 
Synchronisiert
10.sync.times.print
Asynchron
10.async.times.print
System-Befehle 
Einfacher Aufruf
`ls -la`
Rückgabewert
`ls -la`.result.print
`ls -la`.exec.print
Ausgabe
`ls -la`.output.print
`ls -la`.out.print
`ls -la`.lines.each.print