Mnoho programovacích jazyků používá funkce. Funkce je sada příkazů k provedení určitého úkolu. Hlavní kód lze rozdělit do několika funkcí a volat je. Existují dva způsoby vyvolání funkce, jako je volání podle hodnoty a volání odkazem. Při volání metodou hodnoty jsou do funkce předávány kopie proměnných. Pokud dojde ke změně hodnoty funkce, nezmění se původní hodnota. Při volání referencí odráží změny proměnné uvnitř funkce původní hodnotu. klíčový rozdíl mezi výzvou podle hodnoty a referencí je to, při volání podle hodnoty se kopie proměnných předává funkci a při volání odkazem se adresy proměnných předávají funkci. Tento článek popisuje rozdíl mezi volání podle hodnoty a volání odkazem.
1. Přehled a klíčový rozdíl
2. Co je to Call by Value
3. Co je to Call by Reference
4. Podobnosti mezi hodnotou volání a referencí
5. Porovnání vedle sebe - Výzva k hodnotě a výzva odkazem v tabulkové formě
6. Shrnutí
Při volání podle hodnoty se do funkce předávají kopie proměnných. Funkce může tuto zkopírovanou hodnotu změnit, ale nezmění původní hodnotu. Tento koncept lze snadno pochopit zaměněním programu dvou čísel. Viz níže uvedený program C napsaný v prostředí Code Blocks.
Obrázek 01: Program pro výměnu dvou čísel
Podle níže uvedeného programu má proměnná 'a' hodnotu 20 a proměnná 'b' má hodnotu 30. Při volání funkce swap (a, b) jsou tyto dvě hodnoty předány do funkce swap. Ve funkci swap je 'a' zkopírováno do 'x' a 'b' je zkopírováno do 'y'. Nyní 'x' má hodnotu 20 a 'y' má hodnotu 30. Pomocí proměnné temp jsou dvě hodnoty zaměněny. Když tisknete hodnotu 'x' a 'y' uvnitř této swapové funkce, výstup dá 30 pro 'x' a 20 pro 'y'. Po ukončení provádění funkce výměny se řízení vrátí zpět k hlavní funkci. Při tisku hodnot „a“ a „b“ v hlavní funkci budou výsledky původní hodnoty. Jsou 20 pro 'a' a 30 pro 'b'. Změny provedené pomocí funkce swap se neodrážejí v hlavním programu.
Obrázek 02: Výstup swapovacího programu
'x' a 'y' uvnitř funkce swap mají zaměněné hodnoty, které jsou 30 a 20, ale tyto hodnoty nelze použít v hlavním programu. I když 'x' a 'y' mají zaměněné hodnoty, jedná se o lokální proměnné, které mají být zaměněny, a hlavní funkce je nemůže získat. Chcete-li se tomuto problému vyhnout, lze použít volání odkazem.
V této metodě jsou do proměnné odeslány adresy proměnných. Viz níže uvedený program C napsaný v prostředí Code Blocks.
Obrázek 03: Zaměňování dvou čísel pomocí ukazatelů
Podle níže uvedeného příkladu je hodnota „a“ 20 a hodnota „b“ je 30. Místo předávání kopií „a“ a „b“ může programátor odesílat adresy „a“ a „b“ 'pomocí funkce, swap (& a, & b).
Obrázek 04: Výstup swapovacího programu pomocí ukazatelů
Ve swapu by funkce měla používat ukazatele, protože adresy jsou předávány a tyto adresy by měly být drženy ukazateli. Uvnitř funkce se zkopíruje adresa „a“ do „x“ a adresa „b“ se zkopíruje do „y“. Při použití proměnné temp jsou hodnoty 'x' a 'y' zaměněny. V tomto volání referenční metodou se změny uvnitř funkce výměny projeví v hlavním programu. Tisk hodnot „a“ a „b“ v hlavním okně poskytne zaměněné hodnoty. Nyní je výstup „a“ 30 a „b“ je 20. Protože funkce bere adresu proměnných, změny provedené uvnitř funkce ovlivňují původní hodnoty..
Hodnota volání podle vs odkaz na volání | |
Při volání podle hodnoty jsou kopie proměnných předávány do funkce, takže změny provedené uvnitř funkce nezmění původní hodnotu. | Ve výzvě odkazem je adresa proměnných předána funkci, takže změny provedené pro proměnné uvnitř funkce změní původní hodnotu. |
Úprava hodnoty | |
Při volání podle hodnoty se původní hodnota nemění. | Při volání odkazem se původní hodnoty mění. |
Volání hodnotou a volání referencí jsou metody vyvolání funkce. Rozdíl mezi voláním podle hodnoty a voláním podle odkazu je v tom, že ve volání podle hodnoty jsou kopie proměnných předávány do funkce a ve volání podle odkazu jsou adresy proměnných předávány do funkce. Použití volání podle hodnoty nebo volání podle odkazu závisí na úkolu, který má provést.
Můžete si stáhnout PDF verzi tohoto článku a použít ji pro účely offline podle citace. Stáhněte si prosím verzi PDF zde Rozdíl mezi výzvou podle hodnoty a výzvou odkazem
1.Jaiswal, Haresh. "11 Call by Value vs Call by Reference." Youtube, YouTube, 24. prosince 2015. K dispozici zde