curve

F# er .NET-platformens bedste sprog

Morten Rembøl Jacobsen

Software Craftsman 10. juli 2018 øje

F# er .NET-platformens bedste sprog

Har du udfordringer med asynkrone workflows, kritisk behov for korrekthed eller parallelisering af algoritmer?

Så er F# .NET platformens bedste sprog til at løse dine kritiske opgaver hurtigere, med færre fejl og uden uønskede sideeffekter.

Ikke længere kun til løsning af nicheproblemer

F# har tidligere været betragtet som et specialistsprog og dermed ikke et sprog, der henvendte sig til at løse “almindelige” opgaver – et eksotisk sprog forbeholdt forskningsmiljøet, hvor man arbejdede med store datamængder.

Men både sproget og miljøet omkring det har udviklet sig eksplosivt, og det er ofte via F#, at man første gang støder på modnede versioner af egenskaber som asynkrone workflows, LINQ og den stadig eksklusive feature – Type Providers.

Udviklingsværktøjerne omkring sproget har også udviklet sig, så F# fx i dag er fuldt integreret standardsprog i Visual studio og ikke længere tilføjes som en særskilt udvidelse. Det understøtter projekter udviklet mod de seneste versioner af .NET Core /.NET-standard, og der er en række community projekter, som udvikler særdeles velfungerende ”funktionelle” web stacks som fx SAFE og Giraffe.

Med .NET Core er F# (sammen med de andre .NET sprog) blevet uafhængig af Windows platformen, og man kan derfor nu afvikle sine applikationer på fx Linux.

Funktionel programmering der også forstår objekter

Forskellen mellem F# og de andre sprog i .NET-familien er først og fremmest, at i F# er der fokus på det funktionelle paradigme. Man støder derfor ofte på begreber som “default immutability” og “pure functions”. Man får dog på ingen måde hænderne bundet på ryggen, idet F# er fuldt kompatibelt med de andre sprog på .NET platformen og derfor uden problemer forstår sig på den objektorienterede tilgang.

Styr på sideeffekter

At det primære fokus i F# er understøttelse af det funktionelle paradigme, opdager man første gang, man forsøger at ændre tilstand på en værdi. Det kræver en særlig syntaks at tillade sideeffekter (dvs. at have med en variabel at gøre), og det gør samtidigt, at man isolerer disse situationer til et passende sted, idet tilstandsændringer tilføjer kompleksitet, der skal forstås, testes og vedligeholdes.

Bedre test

F# støtter dig i at opbygge programmer, der består af små sammensættelige komponenter / funktioner, der ikke afstedkommer utilsigtede sideeffekter, når de afvikles. Dette gør det samtidigt meget nemmere at teste, fordi du udelukkende skal koncentrere dig om in- og output til/fra funktionen.

Opnå store praktiske fordele

Du bliver for alvor begejstret for F#, når du udnytter styrkerne i typesystemet. Det stærke typesystem understøtter datadreven domænemodellering med stærk typeinferens og kan eliminere mange typiske NULL-pointer exceptions og endda indkode forretningslogik, så fejl kan fanges allerede på kompileringstidspunktet.

F# er designet til at gøre det nemt og sikkert at modellere domæner, håndtere store datamængder, afvikle asynkrone workflows og parallelisere algoritmer. Det funktionelle perspektiv, hvor man ikke accepterer mutable state på objekter giver meget effektive, sikre og elegante løsninger på disse udfordringer.

Uden tilstande der ændrer sig, kan processering af store datamængder samt (egnede) algoritmer med lethed omskrives til at blive afviklet parallelt.

Mindre er bedre

Udover de tekniske fordele med typesystemer, domænemodellering og tilstandsfri beregninger er det også vores praktiske erfaring, at F# programmer (skrevet rigtigt) fylder betydeligt mindre. Den kompakte syntaks, typesystemet og stærke standardbiblioteker giver færre linjer kode, mindre kode at teste og en mere præcis formulering af det problem, der løses.

Hvad forhindrer dig i at udnytte mulighederne med F#?

Den hyppigste bekymring, vi støder på, er udfordringen med at vedligeholde F#-kode. Hvad nu hvis den tilgængelige ”talentmasse” ikke er stor nok, og vil mine C#-udviklere (acceptere at) kunne arbejde med F# kode?

Disse bekymringer bunder i en nedarvet myte om at funktionel programmering er upraktisk, og mange dataloger husker måske tilbage på kurser i funktionel programmering, hvor man anvendte eksotiske sprog, der ikke var bredt praktisk anvendelige og som adskilte sig voldsomt fra fx C#. De tøver derfor med at anbefale brugen af F# til at løse ellers højrelevante problemstillinger.

I STRONGMINDS er det imidlertid vores erfaring, at alle udviklere (uanset uddannelsesmæssig baggrund), der overvinder denne barriere (eller slet ikke opdager den) er kommet ud på den anden side med et stort smil på læben og en ny forbedret tilgang til softwareudvikling.

Praktisk erfaring med F# har faktisk også en positiv afsmitning på, hvordan man løser opgaver i objektorienterede sprog som Java og C#, og i dag må vi som garvede udviklere på både Java og C# bare konkludere, at F# kan være det bedste sprog til at afhjælpe forskellige udfordringer.

Se vores case om backend-udvikling med F# hos eBay

Har du et projekt i F#, hjælper vi gerne

Lars Høgsted

CEO

T: (+45) 2195 6400