Call by Reference vs Call by Value: Rozdíl a srovnání

Funkce mohou být v programu vyvolány dvěma způsoby. Jedna metoda je voláním odkazem a další metoda je voláním hodnoty. Tyto metody lze rozlišit na základě typu hodnot, které se předávají parametrům.

Parametry, které jsou v nich použity, se nazývají skutečné parametry. Používají se v mnoha programovacích jazycích jako C, C++ a Java.

Key Takeaways

  1. Call by reference předává paměťovou adresu proměnné funkci, zatímco call by value posílá kopii hodnoty proměnné.
  2. Při volání odkazem změny provedené v rámci funkce přímo ovlivňují původní proměnnou, zatímco volání podle hodnoty ponechá původní proměnnou nezměněnou.
  3. Volání pomocí reference je paměťově efektivnější než volání podle hodnoty, ale pokud není pečlivě spravováno, může vést k nezamýšleným vedlejším účinkům.

Call by Reference vs Call by Value

Bílý ocet, používaný k čištění nebo vaření, se vyrábí kvašením destilovaného alkoholu, výsledkem je čirá tekutina ostré chuti. Jablečný ocet se vyrábí kvašením cukrů z jablek a má jemnější, mírně nasládlou chuť, používá se do salátových dresinků a marinád.

Call by Reference vs Call by Value

Metoda Call by reference se používá pro přístup ke skutečnému argumentu, kterým je volání funkce. To znamená, že změny jsou provedeny v parametru až po předání argumentu.

Používá stejnou alokaci paměti, která se používá ve skutečných parametrech. Když volá funkci, místo kopírování proměnných je ve volání použita samotná adresa pomocí odkazů.

Call by value je podprogram, který předává aktuální data parametrů, které jsou v podprogramu použity.

V této metodě, když voláte funkci, předáváte hodnotu proměnné argumentů ve volané funkci, takže volaná funkce pracuje s hodnotou. Tato změna se ve volané funkci neprojeví.

Srovnávací tabulka

Parametry srovnáníVolejte podle referenceVolejte podle hodnoty
ProměnlivýProměnná je předána.Kopie proměnné je předána.
Proměnná hodnotaProvedené změny ovlivní vnější funkci.Provedené změny neovlivní funkci venku.
Původní hodnotaJe upraveno.Není upraven.
BezpečnostSkutečné argumenty nejsou bezpečné.Skutečné argumenty jsou bezpečné.
DefiniceK předání používá samotnou proměnnou.K předání používá kopii proměnné.

Co je volání podle reference?

Je to metoda používaná pro předávání argumentů funkci. K uložení adresy proměnných se používají ukazatelové proměnné. V této metodě nejsou skutečné argumenty bezpečné.

Také čtení:  SQL vs PLSQL: Rozdíl a srovnání

Je možné provést náhodné úpravy. Je důležité zacházet s argumentačními operacemi opatrně. Pomáhá vyhnout se změnám provedeným omylem.

Nevytvoří žádná duplicitní data, protože obsahuje pouze jednu hodnotu, takže může uložit paměťový prostor. Pokud si někdo přečte kód, nebude schopen zjistit, zda jsou hodnoty v tomto kódu změněny.

U této metody je velkým problémem doživotní záruka. Nebezpečí se stane, pokud budete pracovat s vícevláknovými programy a lambdami. Chcete-li deklarovat volání odkazem, měli byste předat adresu.

Pokud jde o programování v jazyce C, volejte podle reference. Přímo přistupuje k datovým položkám a provádí na nich funkce. Ale musíte být opatrní, protože jsou v tom zahrnuty ukazatele.

Pokud znáte konkrétní stav datové položky, zavolejte pomocí referenční metody id perfect. Úprava kopie dat nepřinese nic užitečného

Call by reference má nebezpečí, která call by value ne. Hodnotu můžete neúmyslně přiřadit ukazateli a ztratit ji v paměti.

Co je volání podle hodnoty?

V této metodě nebudou mít změny provedené uvnitř funkce parametru žádný vliv na argument. Swap program funguje jako nejlepší příklad programu volání podle hodnoty.

Vysvětluje, že v hodnotě nejsou provedeny žádné změny, i když jsou změněny uvnitř funkce. v Jáva, volání metody podle hodnoty znamená volání metody s jejím parametrem jako hodnotou.

Při této metodě se parametry ukládají do různých paměťových míst. Pokud provedete jakoukoli změnu uvnitř umístění skutečného parametru volajícího, nebude to ovlivněno.

Tato metoda je nejlepší, protože původní hodnota se nemění. Nemůžete však provádět žádné změny skutečných proměnných. Skutečné argumenty budou v této metodě bezpečné, protože nemůžete provést žádné změny náhodně. 

Také čtení:  Kybernetická bezpečnost vs etické hackování: Rozdíl a srovnání

Tato metoda zachovává data, protože nemění původní proměnnou. Zde jsou argumenty proměnné. Změna proměnné v těle funkce není přímá. Složité výrazy mohou někdy fungovat jako argumenty.

Není to paměťově efektivní, protože pro stejnou proměnnou jsou vytvořeny dvě kopie. Pokud je velikost dat velká, metoda call-by-value je neosloví. V takovém případě by programátoři měli zvolit volání referenční metodou. 

Hlavní rozdíly mezi voláním podle reference a voláním podle hodnoty

  1. Původní hodnota je ve volání upravena odkazem. Na druhou stranu ve volání podle hodnoty se původní hodnota nemění.
  2. Volání podle reference je podporováno programovacími jazyky, ale není výchozí. Na druhou stranu volání podle hodnoty funguje standardně v programovacích jazycích.
  3. V Call by reference ovlivní všechny změny provedené v proměnné také proměnnou mimo funkci. Na druhou stranu, při volání podle hodnoty žádné změny provedené v proměnné neovlivní proměnnou mimo funkci.
  4. Volání odkazem umožňuje provádět změny v hodnotě proměnné. Na druhou stranu vám call-by-value neumožní provádět změny.
  5. Při volání odkazem bude předána adresa hodnoty. Ale ve volání odkazem bude předána kopie hodnoty. 
Reference
  1. https://www.jstor.org/stable/3857812
  2. ftp://prog.vub.ac.be/education/EMOOSE/ReuseSlides/merge-papers/Jackson&al1994-semanticDiff.pdf

Poslední aktualizace: 22. července 2023

tečka 1
Jedna žádost?

Vynaložil jsem tolik úsilí, abych napsal tento blogový příspěvek, abych vám poskytl hodnotu. Bude to pro mě velmi užitečné, pokud zvážíte sdílení na sociálních sítích nebo se svými přáteli / rodinou. SDÍLENÍ JE ♥️

Zanechat komentář

Chcete si tento článek uložit na později? Klikněte na srdce v pravém dolním rohu pro uložení do vlastního pole článků!