Kaj je prvorazredna funkcija?

“Prvorazredna funkcija” je izraz, ki se lahko uporablja v računalniškem programiranju in računalniški znanosti za računalniški programski jezik, če je njegova obravnava funkcij v skladu z nizom smernic, čeprav o celotnem obsegu in globini teh smernic ni uradno dogovorjeno . Da bi imeli prvovrsten funkcijski računalniški programski jezik, je glavna značilnost, ki jo je treba podpreti, zmožnost posredovanja funkcij kot argumentov drugim funkcijam. Funkcijo mora biti tudi mogoče dodeliti spremenljivki, da jo je mogoče shraniti. Druge lastnosti, ki se uporabljajo za določanje, kaj je prvorazredna funkcija, vključujejo zmožnost dinamičnega generiranja funkcije med izvajanjem in zmožnost jezika, da ima funkcijo kot vrnjeno vrednost druge funkcije. Jeziki, ki podpirajo prvovrstno arhitekturo funkcij, omogočajo visoko raven abstrakcije in v nekaterih primerih zagotavljajo tudi mehanizem za generiranje dinamične kode med izvajanjem.

Ko se izraz »funkcija« uporablja v ohlapno opredeljenem pomenu, koncept posredovanja funkcije znotraj programa prek spremenljivk ni nujno edinstven za jezike, ki izvorno izvajajo prvovrstno podporo funkcij. Zmožnost posredovanja blokov kode funkcijam ali vračanja nedinamične kode iz funkcije je mogoče zlahka izvesti v številnih programskih jezikih z različnimi mehanizmi. Eden od strogih delov definicije prvorazrednega funkcijskega jezika pa je, da je treba ravnanje s funkcijami kot spremenljivkami izvajati izvorno, brez uporabe metapodatkov, kot so pogojne definicije, in brez klicanja prevajalnika, da ponovno prevede del Koda. Izraz “funkcija” se uporablja tudi za sklicevanje na neodvisne bloke kode, ki se kličejo sami, kar pomeni, da ne vključujejo kodnih blokov, znanih kot metode v objektno usmerjenih programskih jezikih, ali blokov, ki se včasih imenujejo procedure v drugih jezikih.

Ko je jezik zasnovan tako, da omogoča prvovrstno funkcijsko kodo, je mogoče nekatere vzorce oblikovanja implementirati bolj neposredno kot v drugih jezikih. Funkcija lahko prejme funkcijo kot spremenljivko, nato pa sestavi novo funkcijo in vrne novo funkcijo v klicno kodo, tako da to ustvari mehanizem za ustvarjanje programske kode med izvajanjem. To lahko tudi omogoči uporabo funkcij, ki jih uporabnik vnese v realnem času, v jeziku brez uporabe procesov, kot sta refleksija ali evalvacija.

Nekatere najosnovnejše uporabe prvovrstne arhitekture funkcij vključujejo ustvarjanje generičnih funkcij, ki jih je mogoče enostavno ponovno uporabiti, in implementacijo rekurzivnih matematičnih algoritmov, ki lahko sami spreminjajo svoje enačbe, ko napredujejo. Podobna, naprednejša uporaba prvorazrednih mehanizmov je implementacija polimorfizma v jezikih, v katerih ni posebej implementiran. To lahko omogoči, da se funkcije kličejo z istim podpisom funkcije, vendar izvajajo kodo na podlagi konteksta, v katerem je bila poklicana, včasih s posredovanjem ključne funkcije polimorfni funkciji.