“Ensiluokkainen toiminto” on termi, jota voidaan käyttää tietokoneohjelmoinnissa ja tietojenkäsittelytieteessä tietokoneohjelmointikielelle, jos sen toimintojen käsittely noudattaa tiettyjä suuntaviivoja, vaikka näiden ohjeiden koko laajuudesta ja syvyydestä ei ole virallisesti sovittu . Jotta sinulla olisi ensiluokkainen funktionaalinen tietokoneohjelmointikieli, tärkein tuettava ominaisuus on kyky siirtää toimintoja argumentteina muille toiminnoille. Toiminto on myös voitava määrittää muuttujalle, jotta se voidaan tallentaa. Muita ominaisuuksia, joita käytetään määrittämään ensimmäisen luokan funktio, ovat kyky luoda funktio dynaamisesti ajon aikana ja kielen kyky saada funktio toisen funktion palautusarvoksi. Kielet, jotka tukevat ensiluokkaista toimintoarkkitehtuuria, mahdollistavat korkean abstraktion ja myös joissain tapauksissa tarjoavat mekanismin ajonaikaisen dynaamisen koodin luomiseksi.
Kun termiä “toiminto” käytetään löyhästi määriteltynä, käsite funktion siirtämisestä ohjelman sisällä muuttujien kautta ei välttämättä ole ainutlaatuinen kielille, jotka luonnollisesti toteuttavat ensimmäisen luokan toimintojen tuen. Mahdollisuus välittää koodilohkoja toiminnoille tai palauttaa funktiosta ei-dynaaminen koodi voidaan helposti tehdä monilla ohjelmointikielillä eri mekanismien avulla. Yksi ensimmäisen luokan funktiokielen määritelmän tiukoista osista on kuitenkin se, että toimintojen käsittely muuttujina on suoritettava natiivina, ilman metatietoja, kuten ehdollisia määritelmiä, ja kutsumatta kääntäjää kääntämään pala koodi. Termiä “toiminto” käytetään myös viittaamaan itsenäisiin koodilohkoihin, joita kutsutaan yksinään, eli ne eivät sisällä koodilohkoja, jotka tunnetaan nimellä olio -ohjelmointikielet, tai lohkoja, joita toisinaan kutsutaan muilla kielillä.
Kun kieli on suunniteltu sallimaan ensiluokkainen toimintokoodi, jotkin suunnittelumallit voidaan toteuttaa suoremmin kuin muilla kielillä. Funktio voi vastaanottaa funktion muuttujana ja rakentaa sitten uuden funktion ja palauttaa uuden funktion kutsukoodille, joten tämä luo mekanismin ohjelmakoodin ajonaikaiseen luomiseen. Tämä voi myös mahdollistaa reaaliaikaisten käyttäjän syöttämien toimintojen käytön kielellä ilman sellaisia prosesseja kuin pohdintaa tai arviointia.
Jotkut ensimmäisen luokan toimintoarkkitehtuurin peruskäyttötarkoituksista sisältävät sellaisten yleisten toimintojen luomisen, joita voidaan helposti käyttää uudelleen, ja rekursiivisten matemaattisten algoritmien toteuttaminen, jotka kykenevät muokkaamaan yhtälöitään edistyessään. Yksi samanlainen, kehittyneempi käyttö ensimmäisen luokan mekanismeille on polymorfismin toteuttaminen kielillä, joilla sitä ei ole erityisesti toteutettu. Tämä voi sallia toimintojen kutsumisen samalla funktion allekirjoituksella, mutta suorittaa koodin sen kontekstin perusteella, jossa sitä kutsuttiin, joskus välittämällä avaintoiminto polymorfiselle funktiolle.