Hvad er funktionel programmering?
Funktionel programmering er et programmeringsparadigme, hvor beregningsgrundlaget er evaluering af udtryk. Nogle karakteristika er brugen af funktioner med højere orden, gennemsigtig gennemsigtighed og doven evaluering. Fordelene ved programmeringsstil inkluderer, at programmer er lette at læse, er meget pålidelige og kan opdeles i komponenter. Ulemperne er, at beregningerne kan være langsomme, og stilen og syntaks er helt anderledes end andre almindelige programmeringsformer. Den funktionelle programmeringsstil omfavnes oftere af akademikere end af edb-fagfolk.
Som navnet antyder er funktioner en grundlæggende del af dette programmeringsparadigme. Funktioner kan være indlejret i andre funktioner, kaldet funktioner med højere orden, og hver funktion af højere orden kan opdeles i bygningsfunktioner, der er lette at forstå og fejlsøge. Eksempler på nogle højere ordens funktioner er Map and Nest. Funktionen Kort tager en funktion F og listen over variabler, fx (x, y, z) og giver resultatet i en liste: Kort [F, (x, y, z)] = (F (x), F (y), F (z)). Reden tager funktionen F, variablen x og antallet af iterationer: Rede [F, x, 3] = F (F (F (x))).
Ren funktionel programmering tager et input og returnerer et output uden nogensinde at ændre en variables tilstand. Med andre ord giver en funktion med samme input altid de samme resultater, uanset hvad der tidligere er sket i programmet. Dette kaldes referencemæssig gennemsigtighed. Da matematiske funktioner er referencemæssigt gennemsigtige, er funktionel programmering intuitiv for mange matematikere, ingeniører og forskere.
Funktionernes referencemæssige gennemsigtighed betyder, at rækkefølgen af funktionsevaluering ikke er vigtig. Funktioner behøver derfor ikke evalueres, før deres resultater er nødvendige, hvilket kaldes doven evaluering. Dette er i fuld kontrast med den nødvendige programmering, hvor et program begynder med den første kommando og kører gennem listen indtil den sidste kommando. Lazy evaluering springer over dele af programmet, der ikke følger logisk eller er overflødige, hvilket automatisk optimerer programmet og kan reducere computertiden.
Funktionel programmering har mange fordele i forhold til andre programmeringsparadigmer. Funktioner med klare input og output er nemme at læse og forstå. Når en funktion er fejlsøgt grundigt, kan den bruges pålideligt i andre applikationer. Multicore-maskiner kan muligvis beregne funktioner, der evalueres uafhængigt parallelt, hvilket drastisk forbedrer ydelsen for programmer.
Desværre er det ikke alle programmer, der egner sig til parallel computing, og computerfunktionelle programmer kan være ret langsomme. Funktionelle programmer er meget afhængige af rekursion, som ofte er mindre effektiv end ved traditionelle sløjfer eller iterationsmetoder. Faktisk kan funktionel programmering være temmelig klodset og vanskelig at lære, da det ikke ligner andre mere almindelige paradigmer såsom objektorienteret programmering.
Akademikere har en tendens til at favorisere funktionel programmering, da det giver en klar og forståelig måde at programmere komplekse problemer i den virkelige verden. Nogle rene sprog er Haskell og Erlang. Mathematica er specialiseret i symbolsk matematik, R er specialiseret i statistik og J er specialiseret i økonomisk analyse. Multiparadigm sprog som Scala og F # understøtter både funktionel programmering og andre programmeringsformer.