Hvad er en førsteklasses funktion?
"Førsteklasses funktion" er et udtryk, der kan anvendes i computerprogrammering og datalogi på et computerprogrammeringssprog, hvis dens behandling af funktioner overholder et sæt retningslinjer, selvom det ikke formelt er aftalt fuldt omfang og dybde af disse retningslinjer. . For at have et førsteklasses funktionscomputer programmeringssprog er den vigtigste funktion, der skal understøttes, muligheden for at videregive funktioner som argumenter til andre funktioner. En funktion skal også kunne tildeles en variabel, så den kan gemmes. Andre egenskaber, der bruges til at bestemme, hvad der udgør en førsteklasses funktion, inkluderer evnen til dynamisk at generere en funktion ved kørsel og sprogets evne til at have en funktion som en returneringsværdi for en anden funktion. Sprog, der understøtter førsteklasses funktionsarkitektur, giver mulighed for et højt abstraktionsniveau og tilvejebringer også i nogle tilfælde en mekanisme til generering af dynamisk kodetid i løbet af tiden.
Når udtrykket "funktion" bruges i en løst defineret forstand, er begrebet at videregive en funktion inden for et program gennem variabler ikke nødvendigvis unikt for sprog, der naturligt implementerer førsteklasses funktionsstøtte. Muligheden for at viderebringe kodeblokke til funktioner eller returnere ikke-dynamisk kode fra en funktion kan let gøres på mange programmeringssprog gennem forskellige mekanismer. En af de strenge dele af definitionen af et førsteklasses funktionssprog er imidlertid, at håndteringen af funktioner som variabler skal udføres naturligt uden brug af metadata som betingede definerer og uden at kalde en kompilator til at rekompilere et stykke kode. Udtrykket "funktion" bruges også til at henvise til uafhængige kodeblokke, der kaldes på egen hånd, hvilket betyder, at de ikke inkluderer de kodeblokke, der er kendt som metoder i objektorienterede programmeringssprog eller de blokke, der undertiden kaldes procedurer på andre sprog.
Når et sprog er designet til at tillade førsteklasses funktionskode, kan nogle designmønstre implementeres mere direkte end på andre sprog. En funktion kan modtage en funktion som en variabel og derefter konstruere en ny funktion og returnere den nye funktion til opkaldskoden, så dette skaber en mekanisme til oprettelse af run-time af programkode. Dette kan også gøre brug af real-time brugerinputede funktioner mulige inden for sproget uden brug af processer som refleksion eller evaluering.
Nogle af de mest basale anvendelser til førsteklasses funktionsarkitektur inkluderer oprettelse af generiske funktioner, der let kan genbruges og implementering af rekursive matematiske algoritmer, der er i stand til selv at modificere deres ligninger, når de skrider frem. En lignende, mere avanceret anvendelse til førsteklasses mekanismer er implementeringen af polymorfisme på sprog, hvor den ikke er specifikt implementeret. Dette kan tillade, at funktioner kaldes med den samme funktionssignatur, men udfører kode baseret på den kontekst, i hvilken den blev kaldt, undertiden ved at overføre en nøglefunktion til den polymorfe funktion.