Toiminnallinen ohjelmointi on ohjelmointimalli, jossa laskennan perusta on lausekkeiden arviointi. Jotkut ominaisuudet ovat korkeamman tason toimintojen käyttö, viittausläpinäkyvyys ja laiska arviointi. Ohjelmointityylin etuna on, että ohjelmat ovat helppolukuisia, erittäin luotettavia ja voidaan jakaa osiin. Haittapuolena on, että laskelmat voivat olla hitaita ja tyyli ja syntaksi eroavat täysin muista tavallisista ohjelmointityyleistä. Toiminnallisen ohjelmointityylin omaavat useammin tutkijat kuin tietotekniikan ammattilaiset.
Kuten nimestä voi päätellä, toiminnot ovat olennainen osa tätä ohjelmointiparadigmaa. Toiminnot voivat olla sisäkkäin muihin toimintoihin, joita kutsutaan korkeamman tason funktioiksi, ja jokainen korkeamman tason funktio voidaan jakaa rakennuspalikkatoimintoihin, jotka on helppo ymmärtää ja korjata. Esimerkkejä joistakin korkeamman tason toiminnoista ovat Map ja Nest. Funktio Kartta ottaa funktion F ja muuttujien luettelon, esimerkiksi (x, y, z) ja antaa tuloksen luettelossa: Kartta [F, (x, y, z)] = (F (x), F (y), F (z)). Nest ottaa funktion F, muuttujan x ja toistojen määrän: Nest [F, x, 3] = F (F (F (x))).
Puhdas toiminnallinen ohjelmointi ottaa syötteen ja palauttaa tuloksen muuttamatta muuttujan tilaa. Toisin sanoen toiminto, jolla on sama tulo, antaa aina samat tulokset riippumatta siitä, mitä ohjelmassa on aiemmin tapahtunut. Tätä kutsutaan viitteelliseksi avoimuudeksi. Koska matemaattiset toiminnot ovat vertailukelpoisia, toiminnallinen ohjelmointi on intuitiivista monille matemaatikoille, insinööreille ja tutkijoille.
Toimintojen viitteellinen läpinäkyvyys tarkoittaa, että toimintojen arviointijärjestys ei ole tärkeä. Siksi toimintoja ei tarvitse arvioida ennen kuin niiden tuloksia tarvitaan, jota kutsutaan laiskaksi arvioinniksi. Tämä on täysin ristiriidassa pakollisen ohjelmoinnin kanssa, jossa ohjelma alkaa ensimmäisellä komennolla ja kulkee luettelon läpi viimeiseen komentoon saakka. Laiska arviointi ohittaa ohjelman osat, jotka eivät seuraa loogisesti tai ovat tarpeettomia, mikä optimoi ohjelman automaattisesti ja voi lyhentää laskenta -aikaa.
Toiminnallisella ohjelmoinnilla on monia etuja muihin ohjelmointimalleihin verrattuna. Toiminnot, joissa on selkeät tulot ja lähdöt, on helppo lukea ja ymmärtää. Kun toiminto on perusteellisesti virheenkorjattu, sitä voidaan käyttää luotettavasti muissa sovelluksissa. Monisydämiset koneet voivat pystyä laskemaan toimintoja, jotka arvioidaan itsenäisesti rinnakkain, mikä parantaa merkittävästi ohjelmien suorituskykyä.
Valitettavasti kaikki ohjelmat eivät sovellu rinnakkaiseen laskentaan, ja toiminnallisten ohjelmien laskeminen voi olla melko hidasta. Toiminnalliset ohjelmat tukeutuvat vahvasti rekursioon, joka on usein vähemmän tehokasta kuin perinteiset silmukat tai iterointimenetelmät. Itse asiassa toiminnallinen ohjelmointi voi olla melko kömpelöä ja vaikeasti opittavaa, koska se ei muistuta muita yleisempiä paradigmoja, kuten olio -ohjelmointia.
Akateemikot suosivat toiminnallista ohjelmointia, koska se tarjoaa selkeän ja ymmärrettävän tavan ohjelmoida monimutkaisia tosielämän ongelmia. Jotkut puhtaat kielet ovat Haskell ja Erlang. Mathematica on erikoistunut symboliseen matematiikkaan, R on tilastoihin ja J on taloudellinen analyysi. Multiparadigm -kielet, kuten Scala ja F#, tukevat sekä toiminnallista ohjelmointia että muita ohjelmointityylejä.