Werte an eine Funktion
Sollen Werte an eine Funktion übergeben werden, so muss die Funktions-Definition erweitert werden.
Als Beispiel sollen 2 Objekte an eine Funktion übergeben werden:
::test( a, b )
Die Parameter werden in Klammern definiert. Hier werden die Variablen festgelegt, mit denen die Werte dann abrufbar sind. Mehrere Variablen werden mit einem Komma getrennt.
Wichtig:
Der Variable-Name eines Funktions-Parameters muss eindeutig sein und darf nicht bereits im umgebenden Typ verwendet werden! Dies ist Absicht und soll zu klarerem Code führen.
Typ-Prüfung
Wird kein Typ angegeben, kann jedes beliebige Objekt übergeben werden. Ebenso könnte als Vorgabe-Typ "Object" angegeben werden:
::test( Object a, Object b )
Es lässt sich auch konkret festlegen, welcher Typ übergeben werden darf:
::test( Str a, Int b )
Übergabe
Um Argumente (Werte) an eine Funktion zu übergeben, werden diese in Klammern an den Funktions-Namen angehängt. Mehrere Argumente werden mit Komma getrennt:
this.test( "foo", 3 )
Nil
Variablen dürfen in JayMo generell nicht "nil" sein. Außer es wird dies speziell erlaubt, indem ein Fragezeichen an den Variable-Namen angehängt wird. Dies gilt ebenso für Parameter.
Soll also beim vorherigen Beispiel ebenso "nil" übergeben werden dürfen, würde dies so aussehen:
::test( Str a?, Int b? )
Im Funktions-Block werden die Variablen dann genau so als "a?" bzw. "b?", wie gewohnt, verwendet.
Ob die Variable "nil" ist, kann z.B. mit der Objekt-Funktion ".isNil" geprüft werden:
b?.isNil.print
Oder "nil" wird ggf. direkt durch einen vordefinierten Wert ersetzt:
bb = b?.replaceNil( 0 )
In diesem Fall enthält "bb" den Wert von "b?", bzw. im Falle von "nil" eine 0.
Standard-Werte
Auch ist es in JayMo möglich, für Parameter einen Standard-Wert zu definieren. In diesem Fall dürfen auch weniger Argumente an die Funktion übergeben werden.
Für einen Standard-Wert wird an den Variable-Namen ein "=" mit dem gewünschten Wert angehängt:
::test( Str a = "abc", Int b = 1 )
Werden nun weniger Werte an die Funktion übergeben, so wird für die nachfolgenden Variablen der Vorgabe-Wert verwendet:
this.test("xyz", 9) # a = "xyz", b = 9
this.test("xyz") # a = "xyz", b = 1
this.test() # a = "abc", b = 1
this.test # a = "abc", b = 1
Notiz:
Standard-Wert können sehr flexibel definiert werden. So dürfen danach und davor beliebig Werte ohne Standard-Wert stehen.