“Prvoklasna funkcija” je pojam koji se može primijeniti u računalnom programiranju i računalnim znanostima na računalni programski jezik ako je njegova obrada funkcija u skladu sa skupom smjernica, iako puni opseg i dubina ovih smjernica nisu formalno dogovoreni . Da biste imali prvoklasni funkcijski računalni programski jezik, glavna značajka koja mora biti podržana je mogućnost prosljeđivanja funkcija kao argumenata drugim funkcijama. Funkcija se također mora moći dodijeliti varijabli kako bi se mogla pohraniti. Ostala svojstva koja se koriste za određivanje što čini prvoklasnu funkciju uključuju sposobnost dinamičkog generiranja funkcije u vrijeme izvođenja i sposobnost jezika da ima funkciju kao povratnu vrijednost druge funkcije. Jezici koji podržavaju prvoklasnu arhitekturu funkcija omogućuju visoku razinu apstrakcije, a također, u nekim slučajevima, pružaju mehanizam za generiranje dinamičkog koda tijekom izvođenja.
Kada se pojam “funkcija” koristi u slabo definiranom smislu, koncept prosljeđivanja funkcije unutar programa kroz varijable nije nužno jedinstven za jezike koji nativno implementiraju prvoklasnu podršku za funkcije. Sposobnost prosljeđivanja blokova koda funkcijama ili vraćanja nedinamičkog koda iz funkcije lako se može izvesti u mnogim programskim jezicima kroz različite mehanizme. Međutim, jedan od strogih dijelova definicije prvoklasnog funkcijskog jezika je da se rukovanje funkcijama kao varijablama mora obavljati nativno, bez upotrebe metapodataka kao što su uvjetne definicije i bez pozivanja prevoditelja da ponovno kompajlira dio kodirati. Pojam “funkcija” također se koristi za označavanje neovisnih blokova koda koji se pozivaju sami, što znači da ne uključuju blokove koda poznate kao metode u objektno orijentiranim programskim jezicima ili blokove koji se ponekad nazivaju procedure u drugim jezicima.
Kada je jezik dizajniran da dopušta prvoklasni funkcijski kod, neki se obrasci dizajna mogu implementirati izravnije nego u drugim jezicima. Funkcija može primiti funkciju kao varijablu, a zatim konstruirati novu funkciju i vratiti novu funkciju pozivnom kodu, tako da to stvara mehanizam za stvaranje programskog koda tijekom izvođenja. To također može omogućiti korištenje funkcija koje korisnik unese u stvarnom vremenu unutar jezika bez upotrebe procesa kao što su refleksija ili evaluacija.
Neke od najosnovnijih upotreba prvoklasne arhitekture funkcija uključuju stvaranje generičkih funkcija koje se lako mogu ponovno koristiti i implementaciju rekurzivnih matematičkih algoritama koji su u stanju sami modificirati svoje jednadžbe kako napreduju. Jedna slična, naprednija upotreba prvoklasnih mehanizama je implementacija polimorfizma u jezicima u kojima nije posebno implementiran. To može omogućiti pozivanje funkcija s istim potpisom funkcije, ali izvršavanje koda na temelju konteksta u kojem je pozvana, ponekad prosljeđivanjem ključne funkcije polimorfnoj funkciji.