Functions

A szabadkozás nem általános célú programozási nyelv. Ehelyett a inkling az adatfolyamok kontextusában fut az agyi betanítás során. Ennek eredményeképpen a nyelv csak az alapszintű függvényviselkedést támogatja.

Támogatott

  • típusos bemeneti és kimeneti (visszatérési) paraméterek.
  • típusos változók.
  • feltételes (if/else) utasítások.

Nem támogatott

  • statefulness a függvényhívások között.
  • ciklus szerkezetek.
  • közvetlen vagy közvetett rekurzió.
  • try/catch és kivételek.
  • függvények túlterhelése.
  • alapértelmezett paraméterek.
  • változó számú paraméter.

A nem támogatott függvényhasználatot a inkling fordító hibaként jelenti, és letiltja az agyi betanítás működését.

Függvényhívások

A függvény szünetelteti a végrehajtást az aktuális végrehajtási környezetben, és elindít egy új környezetet a függvény futtatásához. A hívó környezetnek meg kell adnia az összes releváns paramétert. Az összes megadott érték típusának pedig egyeznie kell a deklarált paramétertípusokkal (vagy átvehetőnek kell lennie ahhoz).

A return utasítás befejezi a függvény végrehajtását, és visszaadja a megadott értéket a hívó környezetnek. Explicit visszatérési típusokkal rendelkezik a függvények esetében:

  • a visszaadott érték típusának meg kell egyeznie a megadott visszatérési típussal.
  • Ha egynél több visszatérési utasítást használ, minden visszatérési típusnak egyeznie kell.
  • Ha a visszatérési típus explicit tartományt tartalmaz, a tartományon kívüli visszaadott értékek a tartomány legközelebbi érvényes értékére vannak kerekülve. Ha például a visszatérési típus , a számított visszatérési érték pedig , a függvény a értéket number<1..3> 5 adja 3 vissza.

Ha nincs megadva visszatérési típus, a fordító a visszaadott értékek alapján kiveszi a típust.

Példa függvényhívások

# Function call with no arguments
MyFunc()

# Function call with multiple arguments
MyFunc(X, Y)

Függvénydefiníció

A globális névtérben a függvénydefiníciók tartalmazzák a kulcsszót, a nevet, a típusos bemeneti paraméterek opcionális listáját és egy opcionális kimeneti function paramétertípust. A beágyazott függvények kihagyhatja a függvény nevét.

A függvénynevek a szabványos inkling identifier (Inkling identifier) szabályokat követik.

Standard függvénydefiníció

function RadiansToDegrees(Radians: number): number {  
  return Radians * 180 / Math.Pi
}

...

var XDegrees = RadiansToDegrees(Math.Pi)

Beágyazott függvénydefiníció

var XDegrees = function(Radians: number):number {
  return Radians * 180 / Math.Pi
}

Megjegyzés

Minden függvénynek értéket kell visszaadni, de a visszatérési típus definíciója kihagyható, ha a fordító kikövetkeztetheti a visszatérési típust.

Változók

A változók csak függvényen belül deklarálhatóak. Minden változó függvényszintű hatókörrel rendelkezik, még akkor is, ha egy alhatókörben deklarálva van, például egy if/else utasítással. Ennek eredményeképpen a változóneveknek egyedinek kell lennie egy adott függvényen belül.

A változótípus-definíciók megadása nem kötelező, ha a fordító ki tudja a típust egy kezdeti érték-hozzárendelésből. Explicit típusdeklarációkra van szükség, ha a típus nem következtethető ki.

Nem hozzárendelt változódeklaráció

Az alábbi kód egy 1–3 tartományra korlátozott number változót deklarál (a teljes tartományt is beleértve).

var OneToThree: number<1 .. 3>

Hozzárendelt változódeklaráció

Az alábbi kód deklarál és hozzárendel egy változót explicit típus hozzárendelése nélkül. A fordító a kezdeti érték alapján ki tudja a típust ( number ).

var TwoOrThree = 2

Az alábbi kód deklarál egy változót, és hozzárendel egy kezdeti értéket. Az előnyben részesített enumerálás korlátozásának kényszerítésében explicit típus-hozzárendelés is rendelkezésre áll.

var TwoOrThree: number<2, 3> = 2

Fontos

A használat előtt minden változóhoz értéket kell rendelni. A nem hozzárendelt változók fordítóhibákat eredményeznek.

Feltételes végrehajtás

Az inkling az if/else if/else utasításokat támogatja. Minden feltételes kódblokkhoz kapcsos zárójelek szükségesek.

if IsZero(Input) {
  # 0 is a special value
  return 0
} else if IsOdd(Input) {
  # Convert odd numbers to 1
  return 1
} else if IsEven(Input) {
  # Convert even numbers to 2
  return 2
} else {
  # How did you even get here?
  return -1
}