Funktio (joskus puhdas funktio) tarkoittaa sellaista aliohjelmaa, jonka tuloste määrittyy täysin syötteen perusteella eli jolla sama syöte tuottaa aina saman tulosteen. Esimerkiksi + (yhteenlasku) on puhdas funktio, koska sen tulos (summa) määräytyy täysin syötteen eli sen perusteella, mitä lukuja ynnätään; toisaalta tiedoston_sisalto(tiedoston_nimi) ei ole puhdas funktio, koska sen tulos määräytyy tiedoston nimen lisäksi sen perusteella, mitä kyseisen nimisessä tiedostossa sattuu olemaan. Jälkemmäinen aliohjelma käyttää siis tuloksensa muodostamiseen muutakin tietoa kuin tiedoston_nimi-syötettä. (Tietysti tiedostojen sisältökin on tavallaan aliohjelman syötettä, mutta niitä ei anneta erikseen syötteeksi tiedoston_sisalto-aliohjelmalle.)
Käytännössä kuitenkin monissa ohjelmointikielissä mitä tahansa aliohjelmaa kutsutaan funktioksi. Tällöin funktio on pikemminkin toteutustapaan viittaava termi: esimerkiksi Pythonissa, jos aliohjelma on "ohjelmointikielen sisäinen" eli def:llä määritelty aliohjelma, sitä sanotaan funktioksi, jos se taas on ohjelmointikielen ulkopuolinen eli erikseen käyttöjärjestelmän kautta käynnistettävä ali-/apuohjelma, sitä sanotaan lapsiprosessiksi tai milloin miksikin.
Puhtaat funktiot ovat tärkeä aliohjelmien alaluokka, sillä ne ovat erityisen helppoja käyttää. Niiden tulos tietylle syötteelle ei muutu, joten niitä voi kutsua missä vaiheessa haluaa ja niin monta kertaa kuin haluaa.
Ohjeita funktioiden (ja algoritmien) suunnitteluun: http://sange.fi/~atehwa/scheme-kurssi/algoritmisuunnittelu.html
Funktioiden olemuksesta ja lambdakalkyylista: http://sange.fi/~atehwa/lambda-kurssi/luento2.html
Funktio abstraktiokeinona (lambdakalkyylissa): http://sange.fi/~atehwa/lambda-kurssi/luento6.html
(Takaisin ohjelmoinnin käsitteet -sivulle.)