„Pirmos klasės funkcija“ yra terminas, kuris gali būti taikomas kompiuterių programavimo ir kompiuterių moksle kompiuterių programavimo kalbai, jei jos funkcijų traktavimas atitinka gairių rinkinį, nors dėl visos šių gairių apimties ir gylio nėra oficialiai susitarta. . Norint turėti aukščiausios klasės funkcinę kompiuterio programavimo kalbą, pagrindinė funkcija, kurią reikia palaikyti, yra galimybė perduoti funkcijas kaip argumentus kitoms funkcijoms. Funkciją taip pat turi būti galima priskirti kintamajam, kad ją būtų galima išsaugoti. Kitos savybės, naudojamos nustatant, kas yra pirmos klasės funkcija, apima galimybę dinamiškai generuoti funkciją vykdymo metu ir kalbos galimybę turėti funkciją kaip kitos funkcijos grąžinimo reikšmę. Kalbos, palaikančios aukščiausios klasės funkcinę architektūrą, leidžia pasiekti aukštą abstrakcijos lygį, o kai kuriais atvejais – dinaminio kodo generavimo vykdymo metu mechanizmą.
Kai terminas „funkcija“ vartojamas laisvai apibrėžta prasme, funkcijos perdavimo programoje per kintamuosius sąvoka nebūtinai būdinga kalboms, kurios iš prigimties įdiegia pirmos klasės funkcijų palaikymą. Galimybę perduoti kodo blokus funkcijoms arba grąžinti nedinaminį kodą iš funkcijos galima lengvai atlikti daugelyje programavimo kalbų naudojant skirtingus mechanizmus. Tačiau viena iš griežtų pirmos klasės funkcijų kalbos apibrėžimo dalių yra ta, kad funkcijos, kaip kintamieji, turi būti tvarkomos natūraliai, nenaudojant metaduomenų, tokių kaip sąlyginiai apibrėžimai, ir neiškviečiant kompiliatoriaus, kuris iš naujo sukompiliuotų kodas. Terminas „funkcija“ taip pat vartojamas kalbant apie nepriklausomus kodo blokus, kurie iškviečiami atskirai, o tai reiškia, kad jie neapima kodų blokų, žinomų kaip metodai objektinės programavimo kalbose arba blokų, kartais vadinamų procedūromis kitomis kalbomis.
Kai kalba sukurta taip, kad būtų galima naudoti aukščiausios klasės funkcijų kodą, kai kurie dizaino modeliai gali būti įgyvendinami tiesiogiai nei kitomis kalbomis. Funkcija gali gauti funkciją kaip kintamąjį, tada sukurti naują funkciją ir grąžinti naują funkciją į iškvietimo kodą, taigi sukuriamas mechanizmas programos kodo kūrimo vykdymo metu. Tai taip pat leidžia naudoti realaus laiko vartotojo įvestas funkcijas kalboje nenaudojant procesų, tokių kaip refleksija ar vertinimas.
Kai kurie iš pagrindinių pirmosios klasės funkcijų architektūros panaudojimo būdų yra bendrųjų funkcijų, kurias būtų galima lengvai panaudoti pakartotinai, kūrimas ir rekursinių matematinių algoritmų, galinčių savarankiškai modifikuoti savo lygtis, įgyvendinimas. Vienas panašus, pažangesnis pirmosios klasės mechanizmų panaudojimas yra polimorfizmo įgyvendinimas tose kalbose, kuriose jis nėra specialiai įgyvendintas. Tai gali leisti funkcijas iškviesti naudojant tą patį funkcijos parašą, bet vykdyti kodą pagal kontekstą, kuriame jis buvo iškviestas, kartais perduodant rakto funkciją polimorfinei funkcijai.