Vad är en förstklassig funktion?
"Första klassens funktion" är en term som kan tillämpas i datorprogrammering och datavetenskap på ett datorprogrammeringsspråk om dess behandling av funktioner följer en uppsättning riktlinjer, även om det inte är formellt enighet om dessa riktlinjer. . För att ha ett förstklassigt datorprogrammeringsspråk är huvudfunktionen som måste stöds möjligheten att skicka funktioner som argument till andra funktioner. En funktion måste också kunna tilldelas en variabel så att den kan lagras. Andra egenskaper som används för att bestämma vad som utgör en förstklassig funktion inkluderar förmågan att dynamiskt generera en funktion under körning och språkets förmåga att ha en funktion som ett returvärde för en annan funktion. Språk som stöder förstklassig funktionsarkitektur möjliggör en hög nivå av abstraktion och ger i vissa fall också en mekanism för dynamisk kodgenerering i driftstid.
När termen "funktion" används i en löst definierad bemärkelse, är begreppet att skicka en funktion inom ett program genom variabler inte nödvändigtvis unikt för språk som naturligt implementerar förstklassig funktionsstöd. Möjligheten att skicka kodblock till funktioner eller att returnera icke-dynamisk kod från en funktion kan enkelt göras på många programmeringsspråk genom olika mekanismer. En av de strikta delarna av definitionen av ett förstklassigt funktionsspråk är emellertid att hanteringen av funktioner som variabler måste göras nativt, utan att använda metadata som villkorade definieringar och utan att kalla en kompilator för att kompilera en bit av koda. Termen "funktion" används också för att hänvisa till oberoende kodblock som kallas på egen hand, vilket innebär att de inte inkluderar kodblocken kända som metoder i objektorienterade programmeringsspråk eller blocken som ibland kallas procedurer på andra språk.
När ett språk är utformat för att tillåta förstklassig funktionskod kan vissa designmönster implementeras mer direkt än på andra språk. En funktion kan ta emot en funktion som en variabel och sedan konstruera en ny funktion och återställa den nya funktionen till den ringande koden, så detta skapar en mekanism för att skapa programkod för körning. Detta kan också göra det möjligt att använda realtidsanvändade funktioner i språket utan att använda processer som reflektion eller utvärdering.
Några av de mest grundläggande användningsområdena för förstklassig funktionsarkitektur inkluderar att skapa generiska funktioner som enkelt kan återanvändas och implementera rekursiva matematiska algoritmer som kan självmodifiera sina ekvationer när de fortskrider. En liknande, mer avancerad användning för förstklassiga mekanismer är implementeringen av polymorfism på språk där det inte är specifikt implementerat. Detta kan göra det möjligt att anropa funktioner med samma funktionssignatur men köra kod baserat på det sammanhang där den kallades, ibland genom att skicka en nyckelfunktion till den polymorfa funktionen.