Dela via


Värden

Värden i F# är kvantiteter som har en viss typ. värden kan vara heltal eller flyttalsnummer, tecken eller text, listor, sekvenser, matriser, tupplar, diskriminerade unioner, poster, klasstyper eller funktionsvärden.

Binda ett värde

Termen bindning innebär att ett namn associeras med en definition. Nyckelordet let binder ett värde, som i följande exempel:

let a = 1
let b = 100u
let str = "text"

// A function value binding.

let f x = x + 1

Typen av ett värde härleds från definitionen. För en primitiv typ, till exempel ett heltal eller flyttalsnummer, bestäms typen utifrån typen av literal. I föregående exempel härleder kompilatorn därför typen av b som ska vara unsigned int, medan kompilatorn härleder typen av a som ska vara int. Typen av funktionsvärde bestäms från returvärdet i funktionstexten. Mer information om funktionsvärdestyper finns i Funktioner. Mer information om literaltyper finns i Literaler.

Kompilatorn utfärdar inte diagnostik om oanvända bindningar som standard. Om du vill ta emot dessa meddelanden aktiverar du varning 1182 i projektfilen eller när du anropar kompilatorn (se --warnon under Kompilatoralternativ).

Varför oföränderlig?

Oföränderliga värden är värden som inte kan ändras under körningen av ett program. Om du är van vid språk som C++, Visual Basic eller C# kan det vara förvånande att F# placerar företräde framför oföränderliga värden i stället för variabler som kan tilldelas nya värden under körningen av ett program. Oföränderliga data är en viktig del av funktionell programmering. I en flertrådad miljö är delade föränderliga variabler som kan ändras av många olika trådar svåra att hantera. Med föränderliga variabler kan det ibland vara svårt att avgöra om en variabel kan ändras när den skickas till en annan funktion.

I rena funktionella språk finns det inga variabler och funktioner beter sig strikt som matematiska funktioner. Om kod på ett procedurspråk använder en variabeltilldelning för att ändra ett värde, har motsvarande kod på ett funktionellt språk ett oföränderligt värde som är indata, en oföränderlig funktion och olika oföränderliga värden som utdata. Den här matematiska strängheten möjliggör strängare resonemang om programmets beteende. Det här hårdare resonemanget gör det möjligt för kompilatorer att kontrollera koden strängare och optimera mer effektivt, och gör det enklare för utvecklare att förstå och skriva rätt kod. Funktionskoden är därför förmodligen enklare att felsöka än vanlig procedurkod.

F# är inte ett rent funktionellt språk, men det har fullt stöd för funktionell programmering. Att använda oföränderliga värden är en bra idé eftersom det gör att koden kan dra nytta av en viktig aspekt av funktionell programmering.

Föränderliga variabler

Du kan använda nyckelordet mutable för att ange en variabel som kan ändras. Föränderliga variabler i F# bör vanligtvis ha ett begränsat omfång, antingen som ett fält av en typ eller som ett lokalt värde. Föränderliga variabler med ett begränsat omfång är enklare att kontrollera och är mindre benägna att ändras på felaktiga sätt.

Du kan tilldela ett initialt värde till en föränderlig variabel med hjälp av nyckelordet let på samma sätt som du definierar ett värde. Skillnaden är dock att du senare kan tilldela nya värden till föränderliga variabler med hjälp av operatorn <- , som i följande exempel.

let mutable x = 1
x <- x + 1

Värden som har markerats mutable kan automatiskt höjas till 'a ref om de fångas upp av en stängning, inklusive formulär som skapar stängningar, till exempel seq byggare. Om du vill bli meddelad när detta inträffar aktiverar du varning 3180 i projektfilen eller när du anropar kompilatorn.

Rubrik Beskrivning
låt bindningar Innehåller information om hur du använder nyckelordet let för att binda namn till värden och funktioner.
Funktioner Ger en översikt över funktioner i F#.

Se även