A programozásban az alapértelmezett argumentum egy függvény argumentum , amely meghívásakor nem kötelező. A legtöbb programozási nyelvben a függvények egy vagy több argumentumot vehetnek fel. Általános szabály, hogy minden argumentumot teljes mértékben meg kell adni (mint a C programozási nyelvben [1] ). Később egyes nyelvek (például a C++ ) lehetővé tették a programozó számára, hogy megadja néhány argumentum értékét a függvény deklarációjában. Így a függvény csak a szükséges argumentumok átadásával hívható meg.
Tekintsük a következő függvény deklarációt:
int my_func ( int a , int b , int c = 12 );Ennek a függvénynek három argumentuma van, amelyek közül az utolsó alapértelmezett értéke 12. A programozó kétféleképpen hívhatja meg ezt a függvényt:
eredmény = my_func ( 1 , 2 , 3 ); eredmény = my_func ( 1 , 2 );Az első esetben a c argumentum értéke a függvényhívásban van meghatározva, és egyenlő hárommal. A második esetben az utolsó argumentum kimarad, és c értéke tizenkettő lesz .
Az alapértelmezett argumentumok beállítása az utolsó argumentumtól kezdve.
A virtuális metódusok alapértelmezett argumentumértékeit futási időben nem az objektum típusa határozza meg, hanem a mutató típusa határozza meg. Ebben a példában a konzol képernyőjén ez jelenik meg 1 Derived:
osztályú Bázis { public : virtual void foo ( int x = 1 ) { std :: cout << x << "Alap" ; } }; osztály Származtatott : nyilvános Bázis { public : void foo ( int x = 2 ) override { std :: cout << x << "Származtatott" ; } }; int main () { Alap * x = new Származtatott ; x -> foo (); // "1 származtatott" return 0 ; }A tagfüggvényeknél az alapértelmezett argumentumértékek adhatók meg a definíciókban. Az ilyen függvények csak akkor hívhatók meg alapértelmezett értékekkel, ha definíciójuk a hívás előtt történik. Példa :
struct C { void g ( int i , int j = 99 ); C ( int a ); }; C :: C ( int = 5 ) { } void C :: g ( int i = 88 , int j ) { }Néhány más nyelv, például a Java , nem támogatja az alapértelmezett argumentumokat. Ez a viselkedés azonban reprodukálható az azonos nevű és kevesebb argumentumú metódus túlterhelésével :
int MyFunc ( int a , int b ) { return MyFunc ( a , b , 12 ); } int MyFunc ( int a , int b , int c ) { /* fő megvalósítás */ }Minden függvényhíváshoz az alapértelmezett argumentumértékeket át kell adni a meghívott függvénynek. Ez ismétlődéshez vezet a kódban. Ennek elkerülése érdekében az alapértelmezett argumentumokat meg kell szüntetni.
Ha az alapértelmezett argumentum nem csak egy literál, hanem egy kifejezés, akkor ez a kifejezés egyszer kiértékelhető a teljes programra vonatkozóan.
A Python arról nevezetes, hogy az alapértelmezett argumentumokban lévő kifejezéseket csak egyszer, a modul betöltése során értékeli ki. Ha minden függvényhívásban értéket szeretne kiértékelni, akkor az argumentumhoz jelértéket rendelhet (például NonePythonban), majd a függvény első sorában jelölje be.
Például a Python alapértelmezett argumentumai a következőképpen valósíthatók meg:
import datetime def f ( a , b = Nincs ): b = b vagy datetime . dátumidő . most ()