En funktion i programmering , eller en subrutin , är en bit programkod som kan nås från en annan plats i programmet . I de flesta fall är identifieraren associerad med en funktion , men många språk tillåter även namnlösa funktioner . Adressen till den första instruktionen ( operatören ) som ingår i funktionen, till vilken kontrollen överförs när funktionen anropas, är oupplösligt kopplad till funktionsnamnet . Efter att funktionen har utförts återgår kontrollen till returadressen, den punkt i programmet där funktionen anropades.
Funktionen kan ta parametrar och måste returnera något värde, eventuellt tomt. Funktioner som returnerar ett tomt värde kallas ofta för procedurer . I vissa programmeringsspråk har funktions- och procedurdeklarationer olika syntax, i synnerhet kan olika nyckelord användas.
Funktionen måste vara korrekt deklarerad och definierad . Funktionsdeklaration , förutom namnet, innehåller en lista med namn och typer av parametrar (eller: argument ), samt typen av värdet som returneras av funktionen. En funktionsdefinition innehåller funktionens körbara kod. I vissa programmeringsspråk föregår deklarationen av en funktion omedelbart definitionen av funktionen, medan det i ett antal andra språk är nödvändigt att först deklarera funktionen och först därefter ta med dess definition.
I objektorienterad programmering kallas funktioner vars deklarationer är en integrerad del av en klassdefinition metoder . Även i OOP- språk är det möjligt att deklarera en abstrakt (virtuell) funktion utan att deklarera funktionskroppen.
För att använda en tidigare definierad funktion är det nödvändigt att ange namnet på funktionen på önskad plats för programkoden och lista de parametrar som skickas till funktionen. Parametrar som skickas till en funktion kan skickas både med värde och genom referens: en lokal kopia skapas för en variabel som skickas av värde, och alla ändringar som sker i funktionen med den överförda variabeln sker faktiskt med en lokal kopia och påverkar inte på något sätt själva variabeln, medan ändringar som sker i funktionskroppen till en variabel som skickas med referens sker till den överförda variabeln själv.
Funktionen definierar sitt eget (lokala) omfång, som inkluderar indataparametrar, såväl som de variabler som deklareras direkt i själva funktionen.
Det är möjligt att anropa en funktion inom själva funktionen: ett sådant funktionsanrop kallas rekursiv , och processen med successiva kapslade funktionsanrop kallas rekursion . Eftersom det är nödvändigt att komma ihåg (på stacken) funktionens returadress (och även att allokera minne på samma stack för parametrar och lokala variabler som inte är dynamiska), leder obegränsad rekursion till stackoverflow , därför i programmering språk, ställs en viss maximal kapslingsnivå in rekursiva samtal.
i C++-standarden finns även funktioner med standardargument
void foo ( int arg1 , int arg2 = 10 ) { cout << arg1 << arg2 ; } foo ( 9 ); // kommer att anropas och 910 kommer att visaseller, som är samma (se förstaklassfunktioner och lambdafunktion ):
val namn = fn t => skriv ut t