„Funcția de primă clasă” este un termen care poate fi aplicat în programarea computerelor și în știința calculatoarelor unui limbaj de programare pentru calculatoare dacă tratarea funcțiilor aderă la un set de linii directoare, deși domeniul de aplicare și profunzimea acestor linii directoare nu sunt convenite în mod oficial. . Pentru a avea un limbaj de programare pentru computer cu funcții de primă clasă, principala caracteristică care trebuie suportată este capacitatea de a transmite funcții ca argumente altor funcții. De asemenea, o funcție trebuie să poată fi atribuită unei variabile, astfel încât să poată fi stocată. Alte proprietăți utilizate pentru a determina ce constituie o funcție de primă clasă includ capacitatea de a genera dinamic o funcție în timpul execuției și capacitatea limbajului de a avea o funcție ca valoare de returnare a unei alte funcții. Limbile care acceptă arhitectura de funcții de primă clasă permit un nivel ridicat de abstractizare și, de asemenea, în unele cazuri, oferă un mecanism pentru generarea de cod dinamic în timpul execuției.
Atunci când termenul „funcție” este folosit într-un sens vag definit, conceptul de trecere a unei funcții în cadrul unui program prin variabile nu este neapărat unic pentru limbajele care implementează în mod nativ suport pentru funcții de primă clasă. Abilitatea de a trece blocuri de cod către funcții sau de a returna cod non-dinamic dintr-o funcție poate fi realizată cu ușurință în multe limbaje de programare prin diferite mecanisme. Una dintre părțile stricte ale definiției unui limbaj de funcții de primă clasă, totuși, este că manipularea funcțiilor ca variabile trebuie făcută nativ, fără utilizarea de metadate, cum ar fi definițiile condiționate și fără apelarea unui compilator pentru a recompila o bucată de cod. Termenul „funcție” este, de asemenea, folosit pentru a se referi la blocuri de cod independente care sunt apelate pe cont propriu, adică nu includ blocurile de cod cunoscute ca metode în limbajele de programare orientate pe obiect sau blocurile numite uneori proceduri în alte limbaje.
Atunci când o limbă este concepută pentru a permite codul funcțional de primă clasă, unele modele de design pot fi implementate mai direct decât în alte limbi. O funcție poate primi o funcție ca variabilă, apoi poate construi o nouă funcție și poate returna noua funcție la codul de apelare, astfel încât acest lucru creează un mecanism pentru crearea în timp de rulare a codului de program. De asemenea, acest lucru poate face posibilă utilizarea funcțiilor introduse de utilizator în timp real în limbaj fără utilizarea unor procese precum reflecția sau evaluarea.
Unele dintre cele mai de bază utilizări pentru arhitectura de funcții de primă clasă includ crearea de funcții generice care pot fi reutilizate cu ușurință și implementarea algoritmilor matematici recursivi care sunt capabili să-și modifice singur ecuațiile pe măsură ce progresează. O utilizare similară, mai avansată, pentru mecanismele de primă clasă este implementarea polimorfismului în limbaje în care acesta nu este implementat în mod specific. Acest lucru poate permite ca funcțiile să fie apelate cu aceeași semnătură de funcție, dar să execute cod în funcție de contextul în care a fost apelat, uneori prin trecerea unei funcții cheie la funcția polimorfă.