Vad är en förstklassig funktion?
"förstklassig funktion" är en term som kan tillämpas i dataprogrammering och datavetenskap på ett datorprogrammeringsspråk om dess behandling av funktioner följer en uppsättning riktlinjer, även om hela räckvidden och djupet i dessa riktlinjer inte formellt överenskommits. För att ha ett förstklassigt funktionsdatorprogrammeringsspråk är huvudfunktionen som måste stöds förmågan 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 vid 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 abstraktionsnivå och ger också i vissa fall en mekanism för dynamisk kodgenerering.
När termen "funktion" används i löst definierad mening är begreppet att skicka en funktion inom ett program genom variabler inte nödvändigtvis unikt för språk som naturligtvis implementerar förstklassig funktionsstöd. Möjligheten att överföra 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 naturligt, utan att använda metadata, såsom villkorade definier och utan att ringa en kompilator för att kompilera om en kod. 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 som kallas metoder i objektorienterade programmeringsspråk eller blocken som ibland kallas procedurer på andra språk.
när ett språk ärVissa designmönster är utformade för att möjliggöra förstklassig funktionskod mer direkt än på andra språk. En funktion kan ta emot en funktion som en variabel och sedan konstruera en ny funktion och returnera den nya funktionen till samtalskoden, så detta skapar en mekanism för att skapa programmet. Detta kan också möjliggöra användningen av realtid användarinmatade funktioner inom språket utan användning av processer som reflektion eller utvärdering.
Några av de mest grundläggande användningarna 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 utvecklas. En liknande, mer avancerad användning för förstklassiga mekanismer är implementeringen av polymorfism på språk där den inte specifikt implementeras. Detta kan tillåta funktioner att kallas med samma funktionssignatur men kör kod baserat på sammanhanget i WHICh kallades det ibland genom att överföra en nyckelfunktion till den polymorfa funktionen.