Funkcionalno programiranje je programska paradigma, kjer je osnova računanja vrednotenje izrazov. Nekatere značilnosti so uporaba funkcij višjega reda, referenčna preglednost in leno vrednotenje. Prednosti programskega sloga vključujejo, da so programi enostavni za branje, so zelo zanesljivi in jih je mogoče razdeliti na komponente. Pomanjkljivosti so, da so izračuni lahko počasni, slog in sintaksa pa sta popolnoma drugačna od drugih običajnih programskih slogov. Funkcionalni stil programiranja pogosteje sprejemajo akademiki kot strokovnjaki za računalništvo.
Kot že ime pove, so funkcije temeljni del te programske paradigme. Funkcije so lahko ugnezdene v druge funkcije, imenovane funkcije višjega reda, in vsako funkcijo višjega reda je mogoče razčleniti na funkcije gradnikov, ki jih je enostavno razumeti in odpraviti napake. Primera nekaterih funkcij višjega reda sta Map in Nest. Funkcija Map vzame funkcijo F in seznam spremenljivk, na primer (x, y, z) in poda rezultat v seznamu: Zemljevid [F, (x, y, z)] = (F(x), F (y), F(z)). Nest prevzame funkcijo F, spremenljivko x in število ponovitev: Nest[ F, x, 3] = F(F(F(x))).
Čisto funkcionalno programiranje vzame vhod in vrne izhod, ne da bi kadar koli spremenil stanje spremenljivke. Z drugimi besedami, funkcija z enakim vhodom bo vedno dala enake rezultate, ne glede na to, kaj se je prej zgodilo v programu. Temu pravimo referenčna preglednost. Ker so matematične funkcije referenčno pregledne, je funkcionalno programiranje intuitivno za številne matematike, inženirje in znanstvenike.
Referenčna preglednost funkcij pomeni, da vrstni red vrednotenja funkcij ni pomemben. Zato funkcij ni treba vrednotiti, dokler niso potrebni njihovi rezultati, kar imenujemo leno vrednotenje. To je v popolnem nasprotju z imperativnim programiranjem, kjer se program začne s prvim ukazom in teče po seznamu do zadnjega ukaza. Leno vrednotenje preskoči dele programa, ki ne sledijo logično ali so odveč, kar samodejno optimizira program in lahko skrajša čas računanja.
Funkcionalno programiranje ima številne prednosti pred drugimi programskimi paradigmami. Funkcije z jasnimi vhodi in izhodi so enostavne za branje in razumevanje. Ko je funkcija temeljito razhroščena, jo je mogoče zanesljivo uporabiti v drugih aplikacijah. Večjedrni stroji so morda sposobni izračunati funkcije, ki se neodvisno ocenjujejo vzporedno, kar drastično izboljša zmogljivost programov.
Na žalost niso vsi programi primerni za vzporedno računanje in računalniški funkcionalni programi so lahko precej počasni. Funkcionalni programi se močno zanašajo na rekurzijo, ki je pogosto manj učinkovita kot uporaba tradicionalnih zank ali iteracijskih metod. Dejansko je lahko funkcionalno programiranje precej nerodno in se ga je težko naučiti, saj ni podobna drugim pogostejšim paradigmam, kot je objektno usmerjeno programiranje.
Akademiki so nagnjeni k funkcionalnemu programiranju, saj zagotavlja jasen in razumljiv način za programiranje kompleksnih problemov v resničnem svetu. Nekateri čisti jeziki so Haskell in Erlang. Mathematica je specializirana za simbolno matematiko, R je specializirana za statistiko in J je specializirana za finančno analizo. Večparadigmski jeziki, kot sta Scala in F#, podpirajo tako funkcionalno programiranje kot druge programske sloge.