Vad är funktionell programmering?

Funktionell programmering är ett programmeringsparadigma där beräkningsbasen är utvärderingen av uttryck. Vissa egenskaper är användningen av högre ordning, referensöppenhet och lat utvärdering. Fördelarna med programmeringsstilen är att program är lätta att läsa, är mycket pålitliga och kan delas in i komponenter. Nackdelarna är att beräkningarna kan vara långsamma och stilen och syntaxen skiljer sig helt från andra vanliga programmeringsstilar. Den funktionella programmeringsstilen omfattas ofta av akademiker än av datavetenskapspersonal.

Som namnet antyder är funktioner en grundläggande del av detta programmeringsparadigm. Funktioner kan kapslas in i andra funktioner, så kallade högre ordningsfunktioner, och varje funktion med högre ordning kan delas upp i byggstenarfunktioner som är lätta att förstå och felsöka. Exempel på vissa högre ordningsfunktioner är Map and Nest. Funktionen Map tar en funktion F och listan med variabler, till exempel (x, y, z) och ger resultatet i en lista: Karta [F, (x, y, z)] = (F (x), F (y), F (z)). Nest tar funktionen F, variabeln x och antalet iterationer: Bo [F, x, 3] = F (F (F (x))).

Ren funktionell programmering tar en ingång och returnerar en utgång utan att någonsin ändra en variabelns tillstånd. Med andra ord ger en funktion med samma ingång alltid samma resultat oavsett vad som har inträffat tidigare i programmet. Detta kallas referens transparens. Eftersom matematiska funktioner är referensellt transparenta är funktionell programmering intuitiv för många matematiker, ingenjörer och forskare.

Funktionernas referensöppenhet innebär att ordningsföljden av funktionsbedömning inte är viktig. Funktioner behöver därför inte utvärderas förrän deras resultat behövs, vilket kallas lat utvärdering. Detta står i full kontrast med nödvändig programmering, där ett program börjar med det första kommandot och kör igenom listan tills det sista kommandot. Lat utvärdering hoppar över delar av programmet som inte följer logiskt eller är överflödigt, vilket automatiskt optimerar programmet och kan minska datortiden.

Funktionell programmering har många fördelar jämfört med andra programmeringsparadigmer. Funktioner med tydliga in- och utgångar är lätta att läsa och förstå. När en funktion har felsökts noggrant kan den användas pålitligt i andra applikationer. Multicore-maskiner kan kanske beräkna funktioner som utvärderas oberoende parallellt, vilket drastiskt förbättrar programmets prestanda.

Tyvärr lånar inte alla program sig till parallell databehandling, och beräkningsfunktionella program kan vara ganska långsamma. Funktionella program förlitar sig starkt på rekursion, vilket ofta är mindre effektivt än att använda traditionella slingor eller iterationsmetoder. I själva verket kan funktionell programmering vara ganska klumpig och svår att lära sig eftersom den inte liknar andra vanligare paradigmer, t.ex. objektorienterad programmering.

Akademiker tenderar att gynna funktionell programmering eftersom det ger ett tydligt och förståeligt sätt att programmera komplexa verkliga problem. Några rena språk är Haskell och Erlang. Mathematica är specialiserat på symbolisk matematik, R är specialiserad på statistik och J är specialiserad på finansiell analys. Multiparadigm-språk som Scala och F # stöder både funktionell programmering och andra programmeringsstilar.

ANDRA SPRÅK

Hjälpte den här artikeln dig? Tack för feedbacken Tack för feedbacken

Hur kan vi hjälpa? Hur kan vi hjälpa?