Funktioner

Inskt är inte ett programmeringsspråk för generell användning. I stället körs In streaming i kontexten för dataströmmar under hjärnans träning. Därför stöder språket endast grundläggande funktionsbeteende.

Stöds

  • indata- och utdataparametrar (retur).
  • typierade variabler.
  • villkorliga instruktioner (if/else).

Stöds inte

  • state över funktionsanrop.
  • -loopkonstruktioner.
  • direkt eller indirekt rekursion.
  • try/catch och undantag.
  • funktionsöverlagring.
  • standardparametrar.
  • variabelt antal parametrar.

Funktionsanvändningen som inte stöds rapporteras som ett fel av inpilatorn och inaktiverar träning av hjärnan.

Funktionsanrop

Funktionen anropar pausar körningen i den aktuella körningskontexten och startar en ny kontext för att köra funktionen. Den anropande kontexten måste ange alla relevanta parametrar. Och typerna av alla angivna värden måste matcha (eller vara typotypbara till) de deklarerade parametertyperna.

Instruktionen return avslutar körningen av funktionen och returnerar det angivna värdet till den anropande kontexten. För funktioner med explicita returtyper:

  • typen av returvärde måste matcha den angivna returtypen.
  • Om fler än en retursats används måste alla returtyper matcha.
  • Om returtypen har ett explicit intervall avrundas returvärden utanför intervallet till närmaste giltiga värde i intervallet. Om returtypen till exempel är och det number<1..3> beräknade returvärdet är 5returnerar funktionen 3.

Om ingen returtyp anges härför kompilatorn typen baserat på de returnerade värdena.

Exempel på funktionsanrop

# Function call with no arguments
MyFunc()

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

Funktionsdefinition

Funktionsdefinitioner i det globala namnområdet function inkluderar nyckelordet, ett namn, en valfri lista med indataparametrar och en valfri utdataparametertyp. Infogade funktioner kan utelämna funktionsnamnet.

Funktionsnamn följer standardreglerna för Inidentifierare.

Standardfunktionsdefinition

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

...

var XDegrees = RadiansToDegrees(Math.Pi)

Definition av infogade funktioner

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

Anteckning

Alla funktioner måste returnera ett värde, men definitionen av returtypen kan utelämnas om returtypen kan härledas av kompilatorn.

Variabler

Variabler kan bara deklareras i en funktion. Alla variabler har omfång på funktionsnivå, även när de deklareras inom ett underomfång som en if/else-instruktion. Därför måste variabelnamn vara unika inom en viss funktion.

Definitioner av variabeltyper är valfria när kompilatorn kan här dra slutsatsen av typen från en inledande värdetilldelning. Explicita typdeklarationer krävs när typen inte kan härledas.

Deklaration av otilldelade variabler

Följande kod deklarerar en variabel number som är begränsad till intervallet 1 till 3 (inklusive).

var OneToThree: number<1 .. 3>

Deklaration av tilldelad variabel

Följande kod deklarerar och tilldelar en variabel utan att tilldela en explicit typ. Kompilatorn kan här dra slutsatsen av typen (number) baserat på det ursprungliga värdet.

var TwoOrThree = 2

Följande kod deklarerar en variabel och tilldelar ett ursprungligt värde. Om du vill framtvinga en prioriterad uppräkningsbegränsning tillhandahålls även en explicit typtilldelning.

var TwoOrThree: number<2, 3> = 2

Viktigt

Alla variabler måste tilldelas ett värde innan de används. Otilldelade variabler resulterar i kompileringsfel.

Villkorlig körning

Inkling stöder if/else if/else-instruktioner. Kparenteser krävs för alla villkorliga kodblock.

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
}