A programozási nyelvekben a függvényeket kétféleképpen lehet meghívni: ezt hívják értékhívásnak és hívás referenciának.
Ebben az oktatóanyagban megtanulod,
- Mi az a hívás érték módszerrel?
- Mi az a Call by Reference módszer?
- Példa hívás érték módszerrel
- Példa hívásra referencia módszerrel
- Érték szerinti hívás vs. referenciahívás
- A Call by value módszer használatának előnyei
- A referencia módszerrel történő hívás előnyei
- A Call by value módszer használatának hátrányai
- A Call by reference módszer használatának hátrányai
Mi az a Call by Value módszer?
Az értékenkénti hívás módszer egy argumentum értékét másolja a függvény formális paraméterébe. Ezért a fő függvény paraméterében végrehajtott változtatások nem befolyásolják az argumentumot.
Ebben a paraméter-továbbítási módszerben a tényleges paraméterek értékeit átmásoljuk a függvény formális paramétereibe, és a paramétereket különböző memóriahelyeken tároljuk. Tehát a funkciókban végrehajtott változtatások nem tükröződnek a hívó tényleges paramétereiben.
FŐ KÜLÖNBSÉG
- A Call by value módszerben az eredeti érték nem módosul, míg a Call by reference módszerben az eredeti érték módosul.
- Az Érték szerinti hívás során a változó egy példánya kerül átadásra, míg a Hivatkozás szerinti hívás során maga a változó kerül átadásra.
- Az Érték szerinti hívás során a tényleges és formális argumentumok különböző memóriahelyeken jönnek létre, míg a hivatkozás szerinti hívásnál a tényleges és formális argumentumok ugyanabban a memóriahelyen jönnek létre.
- Az értékenkénti hívás az alapértelmezett módszer olyan programozási nyelvekben, mint a C ++, PHP, Visual Basic NET és C #, míg a hivatkozás alapján történő hívás csak a Java nyelvet támogatja.
- Érték szerinti hívás, a változók átadása egyszerű módszerrel történik, míg a Hívás referenciánál mutatók szükségesek a változók címének tárolásához.
Mi az a Call by Reference módszer?
A referencia módszerrel történő hívás az argumentum címét bemásolja a formális paraméterbe. Ebben a módszerben a címet a függvényhívásban használt tényleges argumentum elérésére használják. Ez azt jelenti, hogy a paraméterben végrehajtott változtatások megváltoztatják az átadás argumentumát.
Ebben a módszerben a memóriaallokáció megegyezik a tényleges paraméterekkel. A függvényben végzett összes műveletet a tényleges paraméter címén tárolt értéken hajtjuk végre, és a módosított értéket ugyanazon a címen tároljuk.
Példa egy hívás érték módszerre
void main() {int a = 10,void increment(int);Cout << "before function calling" << a;increment(a);Cout << "after function calling" << a;getch();void increment(int x) {int x = x + 1;Cout << "value is" << x;}
Kimenet:
before function calling 10value is 11after function calling 1-0
Mivel a main () -ban deklarált változó különbözik az (x) változótól inkrementálisan (). Ebben a programban csak a változónevek hasonlítanak egymásra, de memóriacímük eltér és más memóriahelyeken vannak tárolva.
Példa a referencia módszerrel történő hívásra
Public static void(string args[]) {int a = 10;System.out.println("Before call Value of a = ", a);Void increment();System.out.println("After call Value of a = ", a);}Void increment(int x) {int x = x + 1;}
Kimenet:
Before call Value of a =10After call Value of a =11
Mivel az „a” -nak deklarált változó a main () „a” változóra utal / mutat. Itt a változó neve különbözik, de mindkettő ugyanazokra a memóriacímekre mutat / utal.
Érték szerinti hívás vs. referenciahívás
Paraméterek | Hívás érték szerint | Hívás referenciával |
---|---|---|
Meghatározás | Egy függvény meghívása közben, amikor értékeket ad át változók másolásával, az úgynevezett "Call By Values". | A függvény meghívása közben a programozási nyelvben a változók értékeinek másolása helyett a változók címét használjuk. Ezt hívjuk "Hívás referenciákként". |
Érvek | Ebben a módszerben a változó egy példányát továbbítják. | Ebben a módszerben magát a változót adják át. |
Hatás | A változó másolatában végrehajtott változtatások soha nem módosítják a függvényen kívüli változó értékét. | A változó változása a függvényen kívüli változó értékét is befolyásolja. |
Az érték megváltoztatása | Nem teszi lehetővé a tényleges változók módosítását. | Lehetővé teszi a változók értékeinek megváltoztatását függvényhívások használatával. |
Változó átadása | A változók értékeinek átadása egyszerű módszerrel történik. | Mutatóváltozókra van szükség a változók címének tárolásához. |
Értékmódosítás | Az eredeti érték nincs módosítva. | Az eredeti érték módosul. |
Memória helye | A tényleges és formális argumentumok különböző memóriahelyeken jönnek létre | A tényleges és formális argumentumok ugyanabban a memóriahelyen jönnek létre |
Biztonság | A tényleges érvek biztonságban maradnak, mivel véletlenül nem módosíthatók. | A tényleges érvek nem biztonságosak. Véletlenül módosíthatók, ezért gondosan kell kezelnie az argumentum műveleteket. |
Alapértelmezett | Alapértelmezés sok programozási nyelvben, például C ++. PHP. Visual Basic NET és C #. | A legtöbb programozási nyelv, például a JAVA, támogatja, de nem alapértelmezettként. |
A Call by value módszer használatának előnyei
A hívás előnyei / előnyei érték módszer szerint:
- A módszer nem változtatja meg az eredeti változót, ezért adatokat őriz.
- Amikor egy függvényt hívnak, soha ne befolyásolja a tényleges argumentumok tényleges tartalmát.
- A hivatalos érveknek átadott tényleges érvek értéke, tehát a hivatalos érvben végrehajtott bármilyen változás nem befolyásolja a valós eseteket.
A referencia módszerrel történő hívás előnyei
Előnyök a referencia módszerrel történő hívás használatához:
- A függvény megváltoztathatja az argumentum értékét, ami nagyon hasznos.
- Nem hoz létre ismétlődő adatokat egyetlen érték tárolására, ami elősegíti a memóriaterület megtakarítását.
- Ebben a módszerben nincs másolat a megtett érvről. Ezért nagyon gyorsan feldolgozzák.
- Segít elkerülni a tévedésből végrehajtott változásokat
- A kódot olvasó személy soha nem tudja, hogy az érték módosítható a függvényben.
A Call by value módszer használatának hátrányai
Az alábbiakban bemutatjuk a hívás érték módszerrel történő fő hátrányait / hátrányait:
- A tényleges paraméterek módosítása a megfelelő argumentumváltozókat is módosíthatja
- Ebben a módszerben az argumentumoknak változóknak kell lenniük.
- A változót közvetlenül nem lehet megváltoztatni a függvénytörzsben.
- Valamikor az érvelés összetett kifejezés lehet
- Két példány készül ugyanarra a változóra, amely nem memória-hatékony.
A Call by reference módszer használatának hátrányai
Itt vannak a fő hivatkozások a referencia módszerrel történő hívás használatára:
- Erős, nem null garancia. A referenciát befogadó függvénynek meg kell győződnie arról, hogy a bemenet nem null. Ezért nincs szükség semmilyen ellenőrzésre.
- Hivatkozás útján a funkció elméletileg nem tiszta.
- Az életre szóló garancia nagy probléma a referenciákkal. Ez különösen veszélyes, ha lambdákkal és többszálú programokkal dolgozunk.