Funktion (programmering)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 26 april 2022; kontroller kräver 7 redigeringar .

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.

Funktionsexempel

JavaScript

function max ( a , b ) { return a >= b ? a : b ; }

ActionScript

public function name ( text : string ) { var textfield : TextField = new TextField (); textfält . text = text ; }

C++

void name ( strängtext ) _ { cout << text ; }

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 visas

Rost

#[inline(alltid)] fn max < T > ( a : T , b : T ) -> T var T : Partiell Ord , { om a > b { a } annat { b } } max ( 3 , 5 );

C#

public void Namn ( strängtext ) { Console . _ WriteLine ( text ); }

Java

public void name ( Strängtext ) { _ System . ut . println ( text ); }

Pascal

procedurens namn ( var text : sträng ) börja skriva ( text ) ; slut ;

PHP

funktionsnamn ( $ text ) { echo $text ; }

Standard ML

roligt namn t = print t

eller, som är samma (se förstaklassfunktioner och lambdafunktion ):

val namn = fn t => skriv ut t

Swift

func foo ( arg1 : Int , arg2 : Int = 10 ) { print ( arg1 * arg2 ) } foo ( arg1 : 9 ) // (9 * 10) Svar: 90

Visual Basic

Undernamn ( text ) Konsol . _ WriteLine ( text ) End Sub

PureBasic

förfarande . l Namn ( text . s ) PrintN ( text ) EndProcedure

Python

def func ( p1 : str , p2 : int = 10 ): print ( p1 , p2 ) func ( 123 ) # 123 10

Nim

proc myfunc ( text : sträng ) = ekotext _

Se även

Länkar