Funkció (programozás)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2022. április 26-án felülvizsgált verziótól ; az ellenőrzések 7 szerkesztést igényelnek .

Egy függvény a programozásban vagy egy szubrutin egy programkód darab, amely a program  egy másik helyéről elérhető . A legtöbb esetben az azonosító egy függvényhez van társítva , de sok nyelv engedélyezi a névtelen függvényeket is . A függvényben szereplő első utasítás ( operátor ) címe, amelyre a függvény meghívásakor a vezérlés átkerül, elválaszthatatlanul kapcsolódik a függvénynévhez . A függvény végrehajtása után a vezérlés visszatér a visszatérési címre, a program azon pontjára, ahol a függvényt meghívták.

A függvény paramétereket vehet fel, és valamilyen értéket kell visszaadnia, esetleg üresen. Az üres értéket visszaadó függvényeket gyakran eljárásoknak nevezik . Egyes programozási nyelvekben a függvény- és eljárásdeklarációk eltérő szintaxissal rendelkeznek, különösen különböző kulcsszavak használhatók.

A függvényt megfelelően deklarálni és definiálni kell . A függvénydeklaráció a név mellett tartalmazza a paraméterek (vagy: argumentumok) neveinek és típusainak listáját, valamint a függvény által visszaadott érték típusát. A függvénydefiníció tartalmazza a függvény végrehajtható kódját. Egyes programozási nyelvekben a függvény deklarálása közvetlenül megelőzi a függvény definícióját, míg számos más nyelvben először deklarálni kell a függvényt, és csak ezután kell megadni a definícióját.

Az objektum-orientált programozásban azokat a függvényeket, amelyek deklarációi az osztálydefiníció szerves részét képezik , metódusoknak nevezzük . Az OOP nyelvekben is lehetséges egy absztrakt (virtuális) függvény deklarálása a függvénytörzs deklarálása nélkül.

Egy korábban definiált függvény használatához szükséges a programkód kívánt helyén feltüntetni a függvény nevét és felsorolni a függvénynek átadott paramétereket. A függvénynek átadott paraméterek értékkel és hivatkozással is átadhatók: egy lokális másolat jön létre az érték által átadott változóhoz, és minden változás, amely a függvény törzsében az átadott változóval együtt történik, valójában lokális másolat, és semmilyen módon nem érinti magát a változót, míg a függvénytörzsben a hivatkozással átadott változóban bekövetkező változások magára az átadott változóra vonatkoznak.

A függvény meghatározza a saját (lokális) hatókörét, amely magában foglalja a bemeneti paramétereket, valamint azokat a változókat, amelyek közvetlenül a függvény törzsében vannak deklarálva.

Magán a függvényen belül is meg lehet hívni egy függvényt: az ilyen függvényhívást rekurzívnak , az egymást követő beágyazott függvényhívások folyamatát pedig rekurziónak nevezzük . Mivel meg kell emlékezni (a veremben) a függvény visszatérési címére (és ugyanabban a veremben le kell foglalni a memóriát a nem dinamikus paraméterek és helyi változók számára), ezért a korlátlan rekurzió verem túlcsorduláshoz vezet , ezért a programozásban nyelvek esetén a rekurzív hívások egy bizonyos maximális egymásba ágyazási szintet állítanak be.

Függvénypéldák

JavaScript

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

ActionScript

public function name ( text : string ) { var textfield : TextField = new TextField (); szövegmező . szöveg = szöveg ; }

C++

érvénytelen név ( stringtext ) _ { cout << szöveg ; }

a C++ szabványban is vannak alapértelmezett argumentumokkal rendelkező függvények

void foo ( int arg1 , int arg2 = 10 ) { cout << arg1 << arg2 ; } foo ( 9 ); // lesz hívva, és megjelenik a 910

Rozsda

#[inline (mindig)] fn max < T > ( a : T , b : T ) -> T ahol T : Részleges sorrend , { if a > b { a } else { b } } max ( 3 , 5 );

C#

public void Név ( karakterlánc ) { Console . _ WriteLine ( szöveg ); }

Java

public void name ( String text ) { Rendszer . ki . println ( szöveg ); }

Pascal

eljárás neve ( var text : string ) begin write ( text ) ; vége ;

PHP

függvény neve ( $szöveg ) { echo $szöveg ; }

Standard ML

mókás név t = t nyomtat

vagy ami ugyanaz (lásd az első osztályú függvényeket és a lambda függvényeket ):

val név = fn t => print t

Swift

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

Visual Basic

Alnév ( szöveg ) Konzol . _ WriteLine ( szöveg ) End Sub

PureBasic

eljárás . l Név ( szöveg . s ) NyomtatásN ( szöveg ) Vége eljárás

Python

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

Nim

proc myfunc ( szöveg : string ) = visszhang szöveg

Lásd még

Linkek