V programovacích jazykoch je možné funkcie vyvolať dvoma spôsobmi: známym ako Call by Value a Call by Reference.
V tomto návode sa dozviete,
- Čo je metóda volania podľa hodnoty?
- Čo je metóda Call by Reference?
- Príklad metódy volania podľa hodnoty
- Príklad hovoru referenčnou metódou
- Výzva podľa hodnoty vs. výzva podľa referencie
- Výhody použitia metódy Call by value
- Výhody použitia metódy Call by reference
- Nevýhody použitia metódy Call by value
- Nevýhody použitia metódy Call by reference
Čo je metóda Call by Value?
Metóda volania podľa hodnoty skopíruje hodnotu argumentu do formálneho parametra tejto funkcie. Zmeny vykonané v parametri hlavnej funkcie preto neovplyvňujú argument.
V tejto metóde odovzdávania parametrov sa hodnoty skutočných parametrov skopírujú do formálnych parametrov funkcie a parametre sa uložia do rôznych pamäťových miest. Takže akékoľvek zmeny vykonané vo vnútri funkcií sa neodrazia v skutočných parametroch volajúceho.
KĽÚČOVÝ ROZDIEL
- V prípade metódy Call by value sa pôvodná hodnota nemení, zatiaľ čo v prípade metódy Call by value sa pôvodná hodnota upravuje.
- V prípade výzvy podľa hodnoty sa odovzdá kópia premennej, zatiaľ čo v prípade výzvy podľa odkazu sa odovzdá samotná premenná.
- V prípade výzvy podľa hodnoty sa skutočné a formálne argumenty vytvoria v rôznych umiestneniach pamäte, zatiaľ čo v prípade výzvy podľa hodnoty sa skutočné a formálne argumenty vytvoria v rovnakom mieste pamäte.
- Call by value je predvolená metóda v programovacích jazykoch ako C ++, PHP, Visual Basic NET a C #, zatiaľ čo Call by reference je podporovaný iba v jazyku Java.
- Pri volaní podľa hodnoty sa premenné odovzdávajú priamočiarou metódou, zatiaľ čo pri volaní podľa referencie sú na ukladanie adresy premenných potrebné ukazovatele.
Čo je metóda Call by Reference?
Metóda Call by reference skopíruje adresu argumentu do formálneho parametra. V tejto metóde sa adresa používa na prístup k skutočnému argumentu použitému volanie funkcie. To znamená, že zmeny vykonané v parametri menia absolvujúci argument.
V tejto metóde je alokácia pamäte rovnaká ako skutočné parametre. Všetky operácie vo funkcii sa vykonávajú s hodnotou uloženou na adrese skutočného parametra a zmenená hodnota sa uloží na rovnakú adresu.
Príklad metódy Call by Value
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;}
Výkon:
before function calling 10value is 11after function calling 1-0
Pretože premenná deklarovaná ako „a“ v main () sa líši od premennej „x“ v prírastku (). V tomto programe sú podobné iba názvy premenných, ale ich adresy v pamäti sú odlišné a sú uložené na rôznych miestach v pamäti.
Príklad metódy Call by Reference
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;}
Výkon:
Before call Value of a =10After call Value of a =11
Pretože premenná deklarovaná ako „a“ v odkazuje na / odkazuje na premennú „a“ v main (). Tu sa názov premennej líši, ale oba smerujú / odkazujú na rovnaké adresy adries v pamäti.
Výzva podľa hodnoty vs. výzva podľa referencie
Parametre | Volať podľa hodnoty | Volať referenciou |
---|---|---|
Definícia | Pri volaní funkcie, keď odovzdávate hodnoty kopírovaním premenných, je táto funkcia známa ako „Call By Values“. | Pri volaní funkcie sa v programovacom jazyku namiesto kopírovania hodnôt premenných používa adresa premenných, ktorá sa označuje ako „Call By Reference“. |
Argumenty | Pri tejto metóde sa odovzdá kópia premennej. | V tejto metóde sa odovzdáva samotná premenná. |
Účinok | Zmeny vykonané v kópii premennej nikdy nemenia hodnotu premennej mimo funkcie. | Zmena premennej má tiež vplyv na hodnotu premennej mimo funkcie. |
Zmena hodnoty | Neumožňuje vám robiť zmeny v skutočných premenných. | Umožňuje vykonávať zmeny v hodnotách premenných pomocou volaní funkcií. |
Absolvovanie premennej | Hodnoty premenných sa odovzdávajú priamočiarou metódou. | Na uloženie adresy premenných sú potrebné premenné ukazovateľa. |
Úprava hodnoty | Pôvodná hodnota nebola zmenená. | Pôvodná hodnota je upravená. |
Umiestnenie pamäte | Skutočné a formálne argumenty sa vytvoria na inom mieste v pamäti | Skutočné a formálne argumenty sa vytvoria na rovnakom mieste v pamäti |
Bezpečnosť | Skutočné argumenty zostávajú bezpečné, pretože sa nedajú náhodne upraviť. | Skutočné argumenty nie sú bezpečné. Môžu byť náhodne upravené, takže s operáciami s argumentmi musíte zaobchádzať opatrne. |
Predvolené | Predvolené v mnohých programovacích jazykoch, ako je C ++. PHP. NET a C #. | Podporuje ho väčšina programovacích jazykov, ako je JAVA, ale nie ako predvolené. |
Výhody použitia metódy Call by value
Výhody / výhody hovoru podľa hodnoty:
- Metóda nemení pôvodnú premennú, takže zachováva údaje.
- Kedykoľvek sa funkcia volá, nikdy neovplyvňujte skutočný obsah skutočných argumentov.
- Hodnota skutočných argumentov odovzdaných formálnym argumentom, takže zmeny vykonané vo formálnom argumente neovplyvnia skutočné prípady.
Výhody použitia metódy Call by reference
Výhody použitia volania pomocou referenčnej metódy:
- Funkcia môže zmeniť hodnotu argumentu, čo je celkom užitočné.
- Nevytvára duplicitné údaje pre uchovanie iba jednej hodnoty, čo vám pomôže ušetriť miesto v pamäti.
- V tejto metóde neexistuje žiadna kópia predloženého argumentu. Preto je spracovaný veľmi rýchlo.
- Pomáha vám vyhnúť sa omylom vykonaným zmenám
- Osoba čítajúca kód nikdy nevie, že hodnotu je možné vo funkcii upraviť.
Nevýhody použitia metódy Call by value
Tu sú hlavné nevýhody / nevýhody hovoru podľa metódy hodnoty:
- Zmeny skutočných parametrov môžu tiež upraviť zodpovedajúce premenné argumentov
- V tejto metóde musia byť argumenty premenné.
- Premennú v tele funkcie nemôžete priamo zmeniť.
- Niekedy môže byť argumentom zložitý výraz
- Pre rovnakú premennú sú vytvorené dve kópie, ktoré nie sú efektívne z hľadiska pamäte.
Nevýhody použitia metódy Call by reference
Tu sú hlavné nevýhody použitia volania referenčnou metódou:
- Silná nenulová záruka. Funkcia prijímajúca referenciu sa musí ubezpečiť, že vstup má nenulovú hodnotu. Preto nemusí byť vykonaná nulová kontrola.
- Po prechode odkazom nebude funkcia teoreticky čistá.
- Doživotná záruka je pri referenciách veľký problém. Toto je obzvlášť nebezpečné pri práci s lambdami a programami s viacerými vláknami.